在我的网站上,有一群“超级用户”非常棒,并且在我的网站上添加了大量内容。
然而,他们多产的活动导致他们的个人资料页面放缓了很多。对于95%的其他用户,返回数据的SPROC非常快。只有这些高级用户才能使用,SPROC的速度很慢。
如何为这组用户优化查询?
您可以假设已经构建了正确的索引。
编辑:好的,我觉得我有点太模糊了。要重新解释这个问题,我如何优化我的网站以提高这5%的用户的性能。鉴于此SPROC与每个用户使用的SPROC相同并且已经进行了很好的优化,我猜测接下来的步骤是探索数据和应用程序层的缓存可能性?
EDIT2:我的超级用户和其他用户之间的唯一区别是他们添加的内容数量。所以我想瓶颈只是提取的大量记录。普通用户向我的网站添加了大约200个项目。这些超级用户添加了10,000多个项目。在他们的个人资料中,我显示他们添加的所有项目(您可以滚动浏览它们)。
答案 0 :(得分:3)
我想你在这里总结一下:
普通用户添加约200件商品 到我的网站。这些超级用户增加了 10,000件物品。在他们的个人资料中,我是 显示他们添加的所有项目 (你可以滚动浏览它们。)
实现分页,以便一次只能获取100个?
答案 1 :(得分:1)
您无法针对特定结果集优化查询,并保持其余查询保持不变。如果你明白我的意思。我猜测只有一个要更改的查询,因此您将针对每种类型的用户进行优化。因此,这种优化方案与其他任何方案都没有区别。找出问题所在;它返回的数据太多了吗?由于数据量的原因,计算时间过长?减速原因究竟在哪里?这些是你需要问自己的问题。
但是我看到你说的是个人资料页面很慢。如果您认为返回该信息的查询已经过优化(因为它适用于95%),您可以考虑对配置文件页面内容进行某种形式的缓存。通常,配置文件页面不必提供实时信息。
缓存可以通过很多方式完成,这个答案中涉及的内容太多了。但是给你一个小例子;你可以使用临时表。您的“配置文件查询”会返回该临时表中的信息,即已计算的信息。因为该查询很简单,所以执行时间不会太长。同时,您确保定期刷新临时表。
只是一些想法。我希望它们对你有用。
修改强>
普通用户会向我的网站添加约200个项目。这些超级用户添加了10,000多个项目。 在他们的个人资料中,我展示了所有的 他们添加的项目(您可以滚动 通过它们。)
显而易见的帮助是限制查询中的结果数量,或者应用一种分页形式(在DAL中,而不是UI / BLL!)。
答案 2 :(得分:1)
您可以限制配置文件显示,使其仅显示最近的200个项目。如果您的高级用户想要查看更多内容,他们可以单击按钮并获取其余项目。那时,他们会期待更慢的反应。
答案 3 :(得分:0)
对这些用户的数据进行分区/分离,然后只有他们才能使用这些表。
在集群环境中,我相信SQL会识别这一点并传播负载以进行补偿,但是在单个服务器环境中,我并不完全确定它是如何进行优化的。
所以基本上(当然大大简化了)......
如果您有一个名为“文章”的表,则有2个表...“文章”,“Top5PercentArticles”。 因为数据现在分成2个较小的数据子集,所以索引较小,数据库中单个表的读写请求将会丢失。
从业务层的角度来看,它并不理想,因为您需要某种方式来列出哪些数据存储在哪些表中,但这完全是一个完全独立的问题。
如果没有通过执行计划的唯一选择是扩展您的服务器平台。