gpt4 book ai didi

mysql - 为什么此查询使用 where 而不是索引?

转载 作者:可可西里 更新时间:2023-11-01 07:33:43 25 4
gpt4 key购买 nike

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

最佳答案

EXPLAIN 的输出有时会产生误导。

例如,filesort 与文件无关,使用 where 并不意味着您正在使用 WHERE 子句,并且 使用索引 可以在没有定义单个索引的情况下显示在表上。

使用where只是表示表上有一些限制子句(WHEREON),并不是所有的记录都会被返回。请注意,LIMIT 不算作限制性子句(尽管它可以)。

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

因为您选择的是 *,所以这是不可能的。 category_idboard_iddisplayorder 以外的字段未包含在索引中,应查找。

关于mysql - 为什么此查询使用 where 而不是索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4140209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com