为什么更改简单查询参数会导致MySQL查询计划发生严重变化(解释)?

时间:2013-05-07 21:33:12

标签: mysql query-optimization database-indexes

我在使用“explain”命令在MySQL中检查我的查询时遇到了一种奇怪的情况。我有一个表,在“Period”,“X”和“Y”列上有三个非唯一的单列索引。这三列中的所有三列都具有相同的整数数据类型。然后我检查以下命令:

EXPLAIN SELECT * FROM MyTable WHERE Period = 201208 AND X >= 0 AND Y <= 454;
EXPLAIN SELECT * FROM MyTable WHERE Period = 201304 AND X >= 0 AND Y <= 454;

第一个显示“使用索引条件;使用where”,但是第二个只显示“Using where”,所以看起来改变一个参数会以某种方式消除查询执行中的索引。

该表总行数约为65000,每个周期值约为5000(因此它是平衡的),第一个查询返回约2000行,第二个返回约500个。此外,后一个周期值(201304)不是表中的“最后一个”,前一个值也不是第一个,有很多行的周期值小于和大于这两个特定的行。

我的原始表格很复杂,有很多列,所以我不能将它粘贴到这里。但是唯一的索引是这三个,查询和我在测试中使用的相同,所以我希望它不要太重要。

有人可以给我一些可能导致这种情况的小费,如果我需要照顾我不知道的事情吗?谢谢。

0 个答案:

没有答案