在使用“解释”命令检查 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”,但奇怪的是,第二个仅显示“使用 where”,所以似乎更改一个参数以某种方式消除了查询执行中的索引。
该表总共有大约 65000 行,每个 Period 值大约 5000(所以它是平衡的),第一个查询返回大约 2000 行,第二个返回大约 500。另外,后一个 period 值(201304)不是“最后一个" 物理在表中,前一个值也不是第一个,有很多行的周期值小于和大于这两个特定的。
我的原始表格非常复杂,有很多列,所以我不能把它粘贴到这里。但是唯一的索引就是这三个,而且查询和我测试时使用的一样,所以我希望不要太在意。
有人可以给我任何提示什么会导致这种情况,如果我需要照顾一些我不知道的事情!谢谢你。