我有2千万条记录的mysql表Stop_Times。分区MySQL表后创建索引?
我对此表使用MyISAM存储引擎。
我的表结构
| agency_id | varchar(50) | NO | | NULL | |
| trip_id | varchar(50) | NO | PRI | NULL | |
| arrival_time | time | NO | | NULL | |
| departure_time | time | NO | | NULL | |
| stop_id | varchar(50) | NO | PRI | NULL | |
| stop_sequence | int(11) | NO | PRI | NULL | |
| route_id | varchar(50) | NO | | NULL | |
| route_type | int(5) | NO | | NULL | |
+---------------------+-------------+------+-----+--------
的显示创建表Stop_Times的输出为 -
CREATE TABLE `Stop_Times` (
`agency_id` varchar(50) NOT NULL,
`trip_id` varchar(50) NOT NULL,
`arrival_time` time NOT NULL,
`departure_time` time NOT NULL,
`stop_id` varchar(50) NOT NULL,
`stop_sequence` int(11) NOT NULL,
`route_id` varchar(50) NOT NULL,
`route_type` int(5) NOT NULL,
UNIQUE KEY `idx_Stop_Times` (`agency_id`,`trip_id`,`stop_sequence`,`stop_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
/*!50100 PARTITION BY KEY (stop_id)
PARTITIONS 250 */
我有一个查询
select distinct trip_id, stop_sequence from Stop_Times where agency_id = ? and stop_id = ?
分区表此查询之前花了4-5分钟。
但现在我已经分区上表stop_id像以key(stop_id) 分区
现在这个查询花费2-3秒来执行。
我有另一个查询接着上述查询 -
select distinct(stop_id) from Stop_Times where agency_id = ? and trip_id = ? and stop_sequence > ?
的输出上上述查询解释是 -
1 SIMPLE Stop_Times range idx_Stop_Times idx_Stop_Times 308 NULL 250 Using where; Using index; Using temporary
此查询花费更多的时间90 - 150秒。
所以我的问题是我需要在trip_id和stop_sequence上创建索引吗? 这会加快查询性能吗?
我是否需要从InnoDB的MyISAM中更改存储引擎,因为此表有多次来自多个用户的读取(选择查询)?
请数据库大师帮帮我。
谢谢
谢谢马克的回复。我将按给定的顺序创建一个索引。但是,由于表上的读取次数,我是否需要更改存储引擎? – Deepu 2012-07-27 07:11:44
我不认为你需要改变引擎。在添加索引后您获得了哪些性能? – 2012-07-27 07:24:36
嗨马克我已经创建了索引,第二个查询需要约30秒。我认为执行查询也太多了。 – Deepu 2012-07-27 08:02:30