Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Server 2005在视图上计数花费的时间太长_Sql_Sql Server 2005_View_Count - Fatal编程技术网

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年的时间范围内克服了它的
*
低效。