针对前5%的用户优化查询

时间:2010-05-20 08:52:16

标签: sql-server-2005 tsql sql-server-2008 optimization

在我的网站上,有一群“超级用户”非常棒,并且在我的网站上添加了大量内容。

然而,他们多产的活动导致他们的个人资料页面放缓了很多。对于95%的其他用户,返回数据的SPROC非常快。只有这些高级用户才能使用,SPROC的速度很慢。

如何为这组用户优化查询?

您可以假设已经构建了正确的索引。

编辑:好的,我觉得我有点太模糊了。要重新解释这个问题,我如何优化我的网站以提高这5%的用户的性能。鉴于此SPROC与每个用户使用的SPROC相同并且已经进行了很好的优化,我猜测接下来的步骤是探索数据和应用程序层的缓存可能性?

EDIT2:我的超级用户和其他用户之间的唯一区别是他们添加的内容数量。所以我想瓶颈只是提取的大量记录。普通用户向我的网站添加了大约200个项目。这些超级用户添加了10,000多个项目。在他们的个人资料中,我显示他们添加的所有项目(您可以滚动浏览它们)。

4 个答案:

答案 0 :(得分:3)

我想你在这里总结一下:

  

普通用户添加约200件商品   到我的网站。这些超级用户增加了   10,000件物品。在他们的个人资料中,我是   显示他们添加的所有项目   (你可以滚动浏览它们。)

实现分页,以便一次只能获取100个?

答案 1 :(得分:1)

您无法针对特定结果集优化查询,并保持其余查询保持不变。如果你明白我的意思。我猜测只有一个要更改的查询,因此您将针对每种类型的用户进行优化。因此,这种优化方案与其他任何方案都没有区别。找出问题所在;它返回的数据太多了吗?由于数据量的原因,计算时间过长?减速原因究竟在哪里?这些是你需要问自己的问题。

但是我看到你说的是个人资料页面很慢。如果您认为返回该信息的查询已经过优化(因为它适用于95%),您可以考虑对配置文件页面内容进行某种形式的缓存。通常,配置文件页面不必提供实时信息。

缓存可以通过很多方式完成,这个答案中涉及的内容太多了。但是给你一个小例子;你可以使用临时表。您的“配置文件查询”会返回该临时表中的信息,即已计算的信息。因为该查询很简单,所以执行时间不会太长。同时,您确保定期刷新临时表。

只是一些想法。我希望它们对你有用。

修改

  

普通用户会向我的网站添加约200个项目。这些超级用户添加了10,000多个项目。   在他们的个人资料中,我展示了所有的   他们添加的项目(您可以滚动   通过它们。)

显而易见的帮助是限制查询中的结果数量,或者应用一种分页形式(在DAL中,而不是UI / BLL!)。

答案 2 :(得分:1)

您可以限制配置文件显示,使其仅显示最近的200个项目。如果您的高级用户想要查看更多内容,他们可以单击按钮并获取其余项目。那时,他们会期待更慢的反应。

答案 3 :(得分:0)

对这些用户的数据进行分区/分离,然后只有他们才能使用这些表。

在集群环境中,我相信SQL会识别这一点并传播负载以进行补偿,但是在单个服务器环境中,我并不完全确定它是如何进行优化的。

所以基本上(当然大大简化了)......

如果您有一个名为“文章”的表,则有2个表...“文章”,“Top5PercentArticles”。 因为数据现在分成2个较小的数据子集,所以索引较小,数据库中单个表的读写请求将会丢失。

从业务层的角度来看,它并不理想,因为您需要某种方式来列出哪些数据存储在哪些表中,但这完全是一个完全独立的问题。

如果没有通过执行计划的唯一选择是扩展您的服务器平台。