0

我有一张名为 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 是阻止使用索引还是我在这里做错了什么?

问候!

4

2 回答 2

1

您需要一起索引 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 将被使用。

于 2013-10-30T05:00:33.283 回答
1

MySQL 在查询中每个表只能使用 1 个索引。当有多个索引可供选择时,MySQL 将根据基数、内存要求、记录数等,对哪一个最有利进行有根据的猜测。

@Mojtaba 的回答解释了如何创建 MySQL 将在您的场景中使用的多列索引。

于 2013-10-30T05:08:23.223 回答