Subscribers
Id (PK, int)
OwnedBy (FK, int)
EmailAddress (varchar 50)
같은 테이블이 있습니다. 테이블이 매우 크다고 가정하면 EmailAddress
을 사용해야합니까? 쓰기 성능 저하에 대해 걱정하지 않습니다.
Subscribers
Id (PK, int)
OwnedBy (FK, int)
EmailAddress (varchar 50)
같은 테이블이 있습니다. 테이블이 매우 크다고 가정하면 EmailAddress
을 사용해야합니까? 쓰기 성능 저하에 대해 걱정하지 않습니다.
. 쿼리는 다음과 같이 다시 쓸 수 있기 때문에
은 : 당신은 MySQL의 GROUP BY
성능 최적화 페이지를 살펴해야
SELECT COUNT(*)
FROM Subscribers
WHERE Subscribers.OwnedBy = 67
GROUP BY EmailAddress
:이
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
so 테이블의 삽입/업데이트 성능 및 크기에 대해 걱정하지 않으시는 경우 반드시 색인을 가지고 가야합니다. EmailAddress
더욱 빠르게 만들기 위해 커버 인덱스를 만들어야합니다. 이 쿼리와 인덱스를 사용하는 경우 사용 등
ALTER TABLE Subscribers ADD KET ix1(OwnedBy, EmailAddress);
확인 상태 : 네 당신이해야
EXPLAIN SELECT COUNT(DISTINCT(EmailAddress))
FROM Subscribers
WHERE Subscribers.OwnedBy = 67;
감사합니다. Omesh가 언급 한 커버 링 인덱스를 작성하는 대신 솔루션에 대해 의견을 제시 할 수 있습니까? – Harper
아마도 도움이 될 것입니다. http://stackoverflow.com/questions/8213235/mysql-covering-vs-composite-vs-column-index – Horen