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
答案 0 :(得分:4)
EXPLAIN
的输出有时会产生误导。
例如,filesort
与文件无关,using where
并不意味着您使用的是WHERE
子句,using index
可以显示在表格中单个索引已定义。
Using where
只是意味着表格中有一些限制条款(WHERE
或ON
),并且不会返回所有记录。请注意,LIMIT
不算作限制条款(尽管可以)。
Using index
表示从索引返回所有信息,而不查找表中的记录。只有在索引覆盖查询所需的所有字段时才可以这样做。
由于您选择*
,这是不可能的。索引不涵盖category_id
,board_id
,display
和order
以外的字段,应该查找。
答案 1 :(得分:0)
它实际上是使用索引category_id_2
。
答案 2 :(得分:0)
正确使用索引category_id_2
,如key
的{{1}}字段所示。
EXPLAIN
只是意味着您只使用Using where
语句选择了一些行,因此您无法获得整个表格;)