索引未在范围查询中使用

时间:2013-04-15 10:16:51

标签: mysql

您好我有这个查询

SELECT * FROM customers WHERE height > 180 AND height < 200

以下是应用explain的结果:

mysql> explain SELECT * FROM customers WHERE height > 180 AND height < 200;
+----+-------------+-----------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+-----------+------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | customers | ALL  | height        | NULL | NULL    | NULL | 10423 | Using where |
+----+-------------+-----------+------+---------------+------+---------+------+-------+-------------+

请注意,字段height有一个索引没有被提取,不知怎的......

height字段是整数。我不知道。我期待它被使用,而type也是range

任何?

1 个答案:

答案 0 :(得分:0)

问题在于指定的范围。显然太松了。在这种特殊情况下,Mysql更喜欢完全扫描而不是使用索引。如果我限制范围,或增加记录数量,则使用height索引,搜索访问策略将根据手册变为range