gpt4 book ai didi

mysql - EXPLAIN 语句说 'Using where; Using index' 如果在查询中设置了 USE INDEX() 否则就说 'Using where'

转载 作者:行者123 更新时间:2023-11-29 02:29:58 26 4
gpt4 key购买 nike

我有一个具有以下结构的应用程序表

app_id VARCHAR(32) NOT NULL, 
dormant VARCHAR(6) NOT NULL,
user_id INT(10) NOT NULL UNSIGNED

我在这个表上有两个索引-:

combo1(UNIQUE) - app_id, user_id; 
combo2(INDEX) - app_id, dormant, user_id

我运行这个查询

EXPLAIN SELECT COUNT(user_id), 
IF(user_id=1,'yes','no') FROM apps
WHERE app_id='app_2' AND dormant = 'false'

它输出以下信息-:

id -> 1; 
type -> SIMPLE;
table -> apps;
possible_keys -> combo1, combo2;
key -> combo2;
key_len -> 34;
ref -> const;
rows -> 1;
Extra -> Using where

但是当我运行这个查询时

EXPLAIN SELECT COUNT(user_id), 
IF(user_id=1,'yes','no')
FROM apps USE INDEX(combo2)
WHERE app_id='app_2' AND dormant = 'false'

它输出以下信息-:

id -> 1; 
type -> SIMPLE;
table -> apps;
possible_keys -> combo2;
key -> combo2;
key_len -> 42;
ref -> const,const;
rows -> 1;
Extra -> Using where; Using index

为什么第二次说 Using index,尽管在​​这两种情况下都使用相同的索引?

最佳答案

来自 MySQL 文档:

仅使用索引树中的信息从表中检索列信息,而无需执行额外的查找以读取实际行。当查询仅使用属于单个索引的列时,可以使用此策略。

如果 Extra 列还显示 Using where,则表示该索引正用于执行键值查找。如果不使用 where,优化器可能会读取索引以避免读取数据行,但不会将其用于查找。例如,如果索引是查询的覆盖索引,优化器可能会扫描它而不使用它进行查找。

关于这方面的更多信息,您可以引用this .

关于mysql - EXPLAIN 语句说 'Using where; Using index' 如果在查询中设置了 USE INDEX() 否则就说 'Using where',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14767570/

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