1

你好我有这个查询

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

任何人?

4

1 回答 1

0

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

于 2013-04-15T15:15:06.897 回答