gpt4 book ai didi

mysql - MySQL 的 Index 中添加 Group By 和 Order By 列好不好

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

我在查询的Where子句中的列上有复合索引,但我应该在索引中添加Group By和Order By列吗?

例如我有一个查询:

select c1, c2
from table t1
where c3 = "A"
and c4 = "B"
Group By c1
Order By c5

我当前的索引位于 c3 和 c4 上(与查询的顺序相同)。我是否应该在索引中添加c1和c4以提高查询性能?

最佳答案

这取决于。

where c3 = "A"
and c4 = "B"
Group By c1
Order By c5

可以使用其中任何一个:

INDEX(c3, c4, c1)
INDEX(c4, c3, c1)

它无法通过GROUP BY到达ORDER BY(除非它们相同)。

另一方面,这更难优化:

where c3 > "A"   -- note the inequality (a "range")
and c4 = "B"
Group By c1
Order By c5

这是最好的:

INDEX(c4, c3)   -- the order matters now: '=' first

进一步:

where c3 = "A"
and c4 = "B"
Group By c1
Order By c1 -- same as GROUP BY
LIMIT 10 -- now can get to this

如果有的话,这将在 10 行后停止

INDEX(c3, c4, c1) or INDEX(c4, c3, c1)

向其他示例添加 LIMIT:他们会找到所有行,对它们进行排序,然后交付 10 行。

更多最优综合指标讨论:http://mysql.rjweb.org/doc.php/index_cookbook_mysql

要使索引“覆盖”,请添加(在末尾)查询中的任何其他列。 (但是不要对此得意忘形。经验法则:不要创建超过 5 列的索引。)“覆盖”会额外提高速度,因为查询可以完全在索引的 BTree 中执行.

关于mysql - MySQL 的 Index 中添加 Group By 和 Order By 列好不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57978003/

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