Sql Server 2005在视图上计数花费的时间太长
我在我的网站上有一个有页面的时事通讯列表,我使用这个视图来加载它 这是视图(未选择列列表):Sql Server 2005在视图上计数花费的时间太长,sql,sql-server-2005,view,count,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.sysNe
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
当我试图执行计数查询以显示分页列表时,就会出现问题
在历史记录表中,我有大约700000行
select count(*) from dbo.NewsletterHistoryView newsletter0_ where newsletter0_.DeliveryMethod 11
执行此计数查询大约需要33秒
我不能将这些记录存储在某个地方,因为分页列表可以被过滤
有关如何解决此问题的任何想法?您可以使用Count(PrimaryID)代替Count(*)。在NewsletterHistory表上创建一个包含以下列的索引
NewsletterId
sysNewsletterHistoryStateId
AboutUserId
我不知道您的数据,所以请尝试三列的不同顺序,以找到最快的一列。如果仍然不够快,请提供更多信息。显示执行计划并添加缺少的索引。一个丑陋的解决方案。。。。将结果放入临时表进行计数。。。但我会选择索引
使用SQl Server management studio->工具->数据库引擎优化顾问。。。将所有使用该表的脚本放在那里,让它告诉您什么是要构建的最佳索引。这有助于手动操作。。。通过trail and error你有什么索引?你在连接中的列上有索引吗?在哪里有?你没有想过使用索引吗?我只在sysnewsletteryHistoryStateID上有索引。我已经创建了一个包含联接中所有列的索引,并且立即执行计数。谢谢这不太可能带来任何好处。SQL Server在2000年的时间范围内克服了它的
*
低效。