我剛剛發現MySQL使用InnoDB引擎的以下行爲。有沒有辦法解釋執行時間的顯着差異?MySQL的QueryOptimizer似乎隨機使用索引(或不)
首先查詢:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp BETWEEN 1207000800290 AND 1207690900290
執行時間:0.715sec
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2', 'PRIMARY', '8', NULL, '3278190','Using where'
第二個查詢:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp > 1207000800290
執行時間:0.002sec
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2', 'ask', '4', NULL, '5850604', 'Using where; Using index'
第三個查詢:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp < 1207690900290
執行時間:0.651sec
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2', 'PRIMARY', '8', NULL, '3278190', 'Using where'
EXPLAIN告訴我,只有第二個查詢使用索引。我的表格包含83 Mio.行,主鍵是時間戳。我也有一個索引(問,時間戳)和一個詢問(這是多餘的,只爲測試目的)。爲什麼MySQL只在第二個查詢中使用索引?
可以添加解釋爲每個查詢請了,請使用'計時您的SQL查詢SQL_NO_CACHE':'SELECT SQL_NO_CACHE問FROM history_time WHERE問> 1.5790和時間戳> 1207000800290' – frail 2012-01-12 11:13:44
,謝謝,我剛添加的解釋 - 定時完成沒有使用緩存 – user871784 2012-01-12 11:25:55