为什么这个查询使用where而不是索引?
问题描述:
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
答
的EXPLAIN
输出有时会产生误导。
例如,filesort
有无关的文件,using where
并不意味着你使用的是WHERE
条款,并using index
可以在表上显示没有定义的单个指标。
Using where
只是表示表格上有一些限制条款(WHERE
或ON
),并不是所有的记录都会被返回。请注意,LIMIT
不算作限制条款(虽然可以)。
Using index
表示所有的信息都是从索引返回的,而不需要查询表中的记录。这只有在查询所需的所有字段都被索引覆盖的情况下才有可能。
由于您选择*
,这是不可能的。除category_id
,board_id
,display
和order
之外的字段未被索引覆盖,应该查找。
答
正确使用索引category_id_2
,如EXPLAIN
的key
字段所示。
Using where
只是意味着你只能选择使用WHERE
声明中的某些行,这样你就不会得到整个表背;)
这是什么意思,当使用哪里;使用索引'显示?也许你可以回答这个http://*.com/questions/41620312/mysql-not-picking-correct-row-count-from-index – 2017-01-12 19:58:09