gpt4 book ai didi

mysql - Distinct(count(ColumnName)) 上是否需要索引,而 where 子句上有索引?

转载 作者:行者123 更新时间:2023-11-29 08:49:47 27 4
gpt4 key购买 nike

我有一张这样的 table

Subscribers
Id (PK, int)
OwnedBy (FK, int)
EmailAddress (varchar 50)

如果我这样查询:

SELECT COUNT(DISTINCT(EmailAddress))
FROM Subscribers
WHERE Subscribers.OwnedBy = 67;

OwnedBy 列上有一个索引。假设表非常大,我是否还应该索引 EmailAddress ?我不担心写入性能下降。

最佳答案

是的,你应该这样做。

因为您的查询可以像这样重写:

SELECT COUNT(*)
FROM Subscribers
WHERE Subscribers.OwnedBy = 67
GROUP BY EmailAddress

您应该查看 MySQL GROUP BY 性能优化页面:

http://dev.mysql.com/doc/refman/5.0/en/group-by-optimization.html

其中规定了以下内容:

The most efficient way to process GROUP BY is when an index is used to 
directly retrieve the grouping columns

因此,如果您不关心插入/更新性能和表的大小,那么您绝对应该在 EmailAddress 上使用索引

关于mysql - Distinct(count(ColumnName)) 上是否需要索引,而 where 子句上有索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11575166/

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