SELECT COUNT(DISTINCT member_id)AS来自amember_payments WHERE com

时间:2012-08-06 19:26:43

标签: sql performance lag amember

所以我的数据库有几十万个成员,处理软件显然不适合这么大的数据库。所以我有一些重大的滞后问题。我很好奇,如果有人有这个讨厌的查询的技巧。

SELECT COUNT(DISTINCT member_id) AS active
           FROM amember_payments
           WHERE completed > 0 AND expire_date >= '2012-08-01' AND amount > 0

它扫描整个数据库。

2 个答案:

答案 0 :(得分:2)

听起来你需要添加一个索引。在不知道您的数据分布的情况下,我无法告诉您哪些列可以添加它,但我的预感会建议'expire_date'是最佳位置。您的索引应位于最独特的字段上,以允许sql server在没有表扫描的情况下快速删除行。

答案 1 :(得分:2)

如果扫描,则需要索引。从您的查询中,您似乎应该为completed,expire_date和amount列添加索引。但是在不了解数据的情况下,我不知道我将使用的确切顺序。