我的网站上有一份分页的简报列表,我使用此视图加载它。
这是视图(未选择列列表):
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秒才能执行。
我不能只在某处存储这些记录,因为可以过滤分页列表。
有关如何解决此问题的任何想法?
答案 0 :(得分:3)
使用以下列
在NewsletterHistory表上创建索引NewsletterId
sysNewsletterHistoryStateId
AboutUserId
我不知道你的数据,所以尝试三列的不同顺序来找到最快的数据。如果它仍然不够快,请给我更多信息。
答案 1 :(得分:0)
您可以使用Count(PrimaryID)来代替使用Count(*)。
答案 2 :(得分:0)
显示执行计划并添加缺失的索引。
答案 3 :(得分:0)
一个丑陋的解决方案....把你的结果扔进一个临时表做点数......但我会用索引...
使用SQl Server管理工作室 - >工具 - >数据库引擎优化顾问...将所有脚本放在那里使用该表,让它告诉你什么是最好的构建索引。它有助于手动执行...通过跟踪和错误