gpt4 book ai didi

sql - MySQL,不解为什么查询慢,有索引吗?

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

我很困惑为什么我的一个查询很慢,我有索引并且刚刚创建了一个新索引。

但它仍然很慢并且出现在我的慢速日志中。

这是我的查询...

  SELECT *, 
COUNT( Word ) AS WordCount
FROM `keywords`
WHERE `LetterIdx` = 'A'
GROUP BY Word
ORDER BY Word;

这里是查询解释

alt text这是我的表结构和索引。

alt text

最佳答案

您可能会发现它的运行速度要快得多,如果您跨(LetterIdx,Word)创建复合索引,它可能会有更多帮助。这是一个 2 列索引,而不是 2 个单列索引

CREATE INDEX keywords_l_w on keywords(letterIdx, Word)

SELECT Word,
COUNT( Word ) AS WordCount
FROM `keywords`
WHERE `LetterIdx` = 'A'
GROUP BY Word
ORDER BY Word;

如果我的猜测是正确的,即 LetterIdx = Word 的第一个字母,这可能会更好

# First create index on Word, then 
SELECT Word,
COUNT( Word ) AS WordCount
FROM `keywords`
WHERE `Word` like 'A%'
GROUP BY Word
ORDER BY Word;

至于“我很困惑为什么我的一个查询很慢,我有索引并且刚刚创建了一个新索引。”

这是因为您要求它检索记录的所有列。这真的有必要吗?即使它可以使用索引(约占所有数据的 1/26),它仍然需要查找数据页来检索所有其他列。如果您有覆盖索引(letteridx、word),则不需要返回数据。

就其值(value)而言,从严格的 SQL 意义上来说,* 和 GROUP BY 并不是一个很好的组合。

关于sql - MySQL,不解为什么查询慢,有索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4729116/

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