我有一张名为 T 的表。 它有 4 个属性:x、y、z 和 w。
我向表中加载了数据。 然后,在 x 上创建一个索引,并在 y 上创建另一个索引。
现在,当我提交此查询时:
select count(*) from T where x <= 10 and y <=100;
我假设将使用索引 x 和索引 y。
但是,这并没有发生!
当我在 select 语句之前使用命令 EXPLAIN 时,它将索引 x 和 y 显示为“possible_keys
”,但在“key
”列下有 NULL。
这意味着没有使用索引。
现在,如果我提交此查询:
select count(*) from T where x<=50;
然后 MySQL 使用索引 x,如 EXPLAIN 命令所示。
那么,条件中的 AND 是否会阻止使用索引,或者我在这里到底做错了什么?
问候!
最佳答案
您需要将 x 和 y 一起索引,更多信息请参见此处: http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html
您只需运行此查询即可:
ALTER TABLE `your_table_name_here`
ADD INDEX `IDX_COMB_XY` (`x` ASC, `y` ASC) ;
现在运行Explain,您将看到将使用IDX_COMB_XY。
关于MySQL select语句没有使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19674152/