gpt4 book ai didi

mysql - 在查询优化中更喜欢什么 : Using filesort or more rows examined

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

我正在尝试使用 EXPLAIN 优化此 mysql 查询。有人可以帮我解决这个问题吗?

EXPLAIN SELECT * FROM keyword
WHERE keyword LIKE "panasonic%"
AND keyword != "panasonic"
AND price < 3230 AND price > 3370
ORDER BY price DESC
LIMIT 99

基本上我想找出以“some keyword”开头但不完全匹配的关键字,并且其价格在某个特定范围内。哦,我必须按照价格的降序排列它们(这就是这里的问题所在)。

解释输出:

id: 1
select_type: SIMPLE
table: keyword
type: range
possible_keys: PRIMARY, keyword_price, price_keyword
key: keyword_price
key_len: 765
ref: NULL
rows: 24
Extra: Using where; Using filesort

索引键名:列名

PRIMARY: keyword
keyword_price: keyword, price
price_keyword: price, keyword

现在,如果我给出使用索引的提示,并将查询更改为

EXPLAIN SELECT * FROM keyword USE INDEX (price_keyword)
WHERE keyword LIKE "panasonic%"
AND keyword != "panasonic"
AND price < 3230 AND price > 3370
ORDER BY price DESC
LIMIT 99

解释输出更改为

id: 1
select_type: SIMPLE
table: keyword
type: index
possible_keys: price_keyword
key: price_keyword
key_len: 790
ref: NULL
rows: 1043044 (WHAT THE ????)
Extra: Using where

解释输出显示行数呈指数增长,但“使用文件排序”已消失。

在这种情况下哪个查询更好? “行检查”列是否具有欺骗性?

问候

最佳答案

Which query is better in this case?

在这种特定情况下,我希望第一个查询更好

选项 A) 提取以指定关键字开头的 ~24 行,并按价格对它们进行排序(请注意,文件排序是一种算法,并不表示排序是在磁盘上完成的) ,

选项 B) 按价格顺序提取约 100 万行并检查所有行以查看它们是否满足关键字限制(直到获得 99 行)。

话虽如此,如果您的关键字是,或者您的数据不统一,则更好的选择可以反转。无论如何,我认为对于大多数应用程序,选项 A) 是赢家。

Can that "rows examined" column be deceptive?

当然。 EXPLAIN 中检查的行是一个估计值。最好检查类似

的输出

SHOW SESSION STATUS LIKE 'handler_%'

查看您实际拉了多少行。

关于mysql - 在查询优化中更喜欢什么 : Using filesort or more rows examined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732565/

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