我有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