我刚刚发现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