我正在运行 SQL Server 2012。
我有一个查询,当条带化为最基本的形式时,如下所示:
SELECT COUNT(DISTINCT fullAddress) as quickCount
FROM leads
WHERE yearID >=12 AND yearID <=21
潜在客户表中有大约 1.49 亿条记录。在leadID 上有一个聚集索引,在YearID 上有一个非聚集索引,并且包含fullAddress。
这个查询需要大约 40 秒才能运行。我意识到这还不错,但在这种情况下还不够快。
我查看了执行计划,据我所知,大约 60% 的成本是 DISTINCT COUNT。
当我像这样运行没有 DISTINCT COUNT 的相同查询时:
SELECT COUNT(*) as quickCount
FROM leads
WHERE yearID >=12 AND yearID <=21
运行仅需 1 秒。
不幸的是,我需要计算不同的完整地址。所以我想弄清楚是否有什么办法可以让第一个查询运行得更快。
这是两个查询的执行计划的屏幕截图:
这是一个更大的链接 - http://www.sequenzia.com/execPlan.jpg
据我所知,我的主要问题是 Distinct Sort (52%)。
对此的任何帮助或反馈都会很棒。
谢谢!
更新
我接受了 Thilo 的建议并应用了这个索引:
CREATE INDEX IDX_X ON LEADS(FULLADDRESS, YEARID);
我实际上创建了 2 个新的测试表,每个表都有完全相同的 100 万条记录。我将相同的原始索引应用于两者,然后将上述索引应用于其中一个。现在,当我比较同一执行计划上的 2 个表时,具有上述索引的表要好一些,为 48% 到 52%。这是新的执行计划 - http://www.sequenzia.com/execPlan2.jpg
这对一些人有帮助,但我真的需要更多的性能。还有其他想法吗?