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

发布于 2024-10-11 06:48:07 字数 770 浏览 3 评论 0原文

我的网站中有一个时事通讯的分页列表,我使用此视图来加载它。

这是视图(没有选择列的列表):

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 秒。

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

关于如何解决这个问题有什么想法吗?

I have a paged list of newsletters in my website and I use this view to load it.

This is the view (without the list of columns selected):

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

The problem appears when I try to execute a count query in order to show the paged list.

In NewsletterHistory table I have about 700.000 rows.

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

This count query takes about 33 seconds to execute.

I can't just store this number of records somewhere because the paged list can be filtered.

Any ideas about how to resolve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

醉生梦死 2024-10-18 06:48:07

使用以下列在 NewsletterHistory 表上创建索引

NewsletterId
sysNewsletterHistoryStateId
AboutUserId

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

Create an index on the NewsletterHistory table with the following columns

NewsletterId
sysNewsletterHistoryStateId
AboutUserId

I dont know your data, so try different orders of the three columns to find the fastest one. If its still not fast enough, give me more info.

巴黎夜雨 2024-10-18 06:48:07

您可以使用 Count(PrimaryID),而不是使用 Count(*)。

Instead of using Count(*) you can use Count(PrimaryID).

吻安 2024-10-18 06:48:07

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

Display Execution plan and add missing indexes.

叶落知秋 2024-10-18 06:48:07

一个丑陋的解决方案....将结果放入临时表中进行计数...但我会使用索引...

使用 SQl Server Management Studio ->工具->数据库引擎优化顾问...将所有使用该表的脚本放在那里,让它告诉您什么是构建的最佳索引。这有点有助于手动完成......通过尝试和错误

an ugly solution .... throw your results into a temp table do the count... but i'd go with indexes...

Use the SQl Server management studio -> tools -> Database engine tuning advisor... place all your scripts there that use that table and let it tell you what will be the best indexes to build. It kind of helps doing it manually ... through trail and error

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文