-3

所以我的数据库有几十万成员,处理软件显然不适合这种规模的数据库。所以我有一些重大的滞后问题。我很好奇是否有人对这个烦人的查询有窍门。

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

它扫描整个数据库。

4

2 回答 2

2

如果它扫描,则需要索引。从您的查询来看,您应该为已完成、过期日期和金额列添加索引。但是如果不更好地了解数据,我不知道我将使用的确切顺序。

于 2012-08-06T19:34:10.230 回答
2

听起来你需要添加一个索引。在不知道您的数据分布的情况下,我无法确定将其添加到哪一列,但我的直觉会建议“expire_date”是最好的地方。您的索引应该位于最独特的字段上,以允许 sql server 在不进行表扫描的情况下快速删除行。

于 2012-08-06T19:32:57.990 回答