2012-07-20 31 views

回答

1

是的,你應該。

由於您的查詢可以寫成這樣:

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

+0

謝謝。你能否評論你的解決方案與Omesh提到的創建覆蓋索引? – Harper 2012-07-20 08:19:18

+0

也許這會幫助你http://stackoverflow.com/questions/8213235/mysql-covering-vs-composite-vs-column-index – Horen 2012-07-20 08:27:31

1

您應該創建覆蓋索引以使其更快。

ALTER TABLE Subscribers ADD KET ix1(OwnedBy, EmailAddress); 

檢查的地位,使用該查詢使用索引,其中:

EXPLAIN SELECT COUNT(DISTINCT(EmailAddress)) 
FROM Subscribers 
WHERE Subscribers.OwnedBy = 67; 
相關問題