MySQL select语句没有使用索引

标签 mysql sql indexing

我有一张名为 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/

相关文章:

mysql - 全文和复合索引以及它们如何影响查询

sql-server - 同时使用 GUID 和自动递增整数

mysql - Count(*) 允许按 null 分组

PHP MySQL 转储命令

mysql - (MySQL) 如何在一个表中连接两列并显示结果?

sql - 根据表B中的记录更新表A中的记录

mysql - 当我尝试在 phpMyAdmin Designer 工具中创建表之间的关系时出现错误 : Missing index on column(s).

mysql 计数具有不同的

sql - 有没有办法解析 SQL 查询以提取列名和表名?

python - Python 中的链表 - Append、Index、Insert 和 Pop 函数。不确定代码/错误