为啥这个查询使用 where 而不是索引?
Posted
技术标签:
【中文标题】为啥这个查询使用 where 而不是索引?【英文标题】:Why is this query using where instead of index?为什么这个查询使用 where 而不是索引? 【发布时间】:2010-11-10 00:40:32 【问题描述】:EXPLAIN EXTENDED SELECT `board` . *
FROM `board`
WHERE `board`.`category_id` = '5'
AND `board`.`board_id` = '0'
AND `board`.`display` = '1'
ORDER BY `board`.`order` ASC
上述查询的输出是
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE board ref category_id_2 category_id_2 9 const,const,const 4 100.00 Using where
我对此有点困惑,因为我有一个索引,其中包含我正在使用的列,这些列的顺序与它们在查询中使用的顺序相同...:
category_id_2 BTREE No No
category_id 33 A
board_id 33 A
display 33 A
order 66 A
【问题讨论】:
【参考方案1】:EXPLAIN
的输出有时会产生误导。
例如,filesort
与文件无关,using where
并不意味着您正在使用WHERE
子句,using index
可以出现在没有定义单个索引的表上。
Using where
只是表示表上有一些限制子句(WHERE
或ON
),并且不会返回所有记录。请注意,LIMIT
不算作限制子句(尽管可以)。
Using index
表示从索引返回所有信息,不查找表中的记录。这只有在查询所需的所有字段都被索引覆盖时才有可能。
由于您选择*
,这是不可能的。 category_id
、board_id
、display
和 order
以外的字段不在索引中,应查找。
【讨论】:
Using where ; Using index
出现是什么意思?也许你可以回答这个***.com/questions/41620312/…【参考方案2】:
实际上是使用索引category_id_2
。
【讨论】:
但它最后说Using where
....也许我误解了它的目的。【参考方案3】:
它正确使用了索引category_id_2
,如EXPLAIN
的key
字段所示。
Using where
仅表示您使用WHERE
语句仅选择了一些行,因此您不会取回整个表;)
【讨论】:
以上是关于为啥这个查询使用 where 而不是索引?的主要内容,如果未能解决你的问题,请参考以下文章