所以我的数据库有几十万个成员,处理软件显然不适合这么大的数据库。所以我有一些重大的滞后问题。我很好奇,如果有人有这个讨厌的查询的技巧。
SELECT COUNT(DISTINCT member_id) AS active
FROM amember_payments
WHERE completed > 0 AND expire_date >= '2012-08-01' AND amount > 0
它扫描整个数据库。
答案 0 :(得分:2)
听起来你需要添加一个索引。在不知道您的数据分布的情况下,我无法告诉您哪些列可以添加它,但我的预感会建议'expire_date'是最佳位置。您的索引应位于最独特的字段上,以允许sql server在没有表扫描的情况下快速删除行。
答案 1 :(得分:2)
如果扫描,则需要索引。从您的查询中,您似乎应该为completed,expire_date和amount列添加索引。但是在不了解数据的情况下,我不知道我将使用的确切顺序。