Sql Server 2005 COUNT在视图上花费的时间太长

时间:2011-01-12 09:10:45

标签: sql sql-server-2005 view count

我的网站上有一份分页的简报列表,我使用此视图加载它。

这是视图(未选择列列表):

SELECT * FROM dbo.NewsletterHistory 
INNER JOIN dbo.Newsletter ON dbo.NewsletterHistory.NewsletterId = dbo.Newsletter.NewsletterId 
INNER JOIN dbo.sysNewsletterHistoryState ON dbo.NewsletterHistory.sysNewsletterHistoryStateId = dbo.sysNewsletterHistoryState.sysNewsletterHistoryStateId 
LEFT JOIN dbo.Client ON dbo.NewsletterHistory.AboutUserId = dbo.Client.ParentUserId

当我尝试执行计数查询以显示分页列表时,会出现问题。

在NewsletterHistory表中,我有大约700,000行。

select count(*) from dbo.NewsletterHistoryView newsletter0_ where newsletter0_.DeliveryMethod  11 

此计数查询大约需要33秒才能执行。

我不能只在某处存储这些记录,因为可以过滤分页列表。

有关如何解决此问题的任何想法?

4 个答案:

答案 0 :(得分:3)

使用以下列

在NewsletterHistory表上创建索引
NewsletterId
sysNewsletterHistoryStateId
AboutUserId

我不知道你的数据,所以尝试三列的不同顺序来找到最快的数据。如果它仍然不够快,请给我更多信息。

答案 1 :(得分:0)

您可以使用Count(PrimaryID)来代替使​​用Count(*)。

答案 2 :(得分:0)

显示执行计划并添加缺失的索引。

答案 3 :(得分:0)

一个丑陋的解决方案....把你的结果扔进一个临时表做点数......但我会用索引...

使用SQl Server管理工作室 - >工具 - >数据库引擎优化顾问...将所有脚本放在那里使用该表,让它告诉你什么是最好的构建索引。它有助于手动执行...通过跟踪和错误