2010-11-10 86 views
4
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 

上述查询的输出是为什么这个查询使用where而不是索引?

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 

回答

4

EXPLAIN输出有时会产生误导。

例如,filesort有无关的文件,using where并不意味着你使用的是WHERE条款,并using index可以在表上显示没有定义的单个指标。

Using where只是表示表格上有一些限制条款(WHEREON),并不是所有的记录都会被返回。请注意,LIMIT不算作限制条款(虽然可以)。

Using index表示所有的信息都是从索引返回的,而不需要查询表中的记录。这只有在查询所需的所有字段都被索引覆盖的情况下才有可能。

由于您选择*,这是不可能的。除category_id,board_id,displayorder之外的字段未被索引覆盖,应该查找。

+0

这是什么意思,当使用哪里;使用索引'显示?也许你可以回答这个http://stackoverflow.com/questions/41620312/mysql-not-picking-correct-row-count-from-index – 2017-01-12 19:58:09

0

它实际上使用索引category_id_2

+0

但它最后说'使用where' ....也许我误解了它的目的。 – Webnet 2010-11-10 00:47:56

0

正确使用索引category_id_2,如EXPLAINkey字段所示。

Using where只是意味着你只能选择使用WHERE声明中的某些行,这样你就不会得到整个表背;)

相关问题