繁体   English   中英

如何在不更改查询的情况下提高SQL查询性能

[英]How to increase SQL Query performance without changing the query

我有一个项目,其中有非常复杂的查询(传统项目),其中有很多查询,项目中的存储过程等。查询的位置从10到30个联接和缓慢的筛选。 无法立即修改项目(将花费至少一年的时间)

是否有硬件方法可以提高性能。 我可以使用一些具有增强计算能力的智能Azure设置来提高速度吗? 或者我需要在物理服务器中寻找什么?

  • 在单个查询中避免多个联接。
  • 从查询中消除游标。
  • 避免使用不相关的
  • 标量子查询。
  • 避免使用多语句表值函数(TVF)。
  • 索引的创建和使用。
  • 了解数据。
  • 在哈希表和实际表中分别创建一个高度选择性索引过滤器数据
  • 对包含大量数据的每个表进行处理,然后对存储过程中的哈希表(而不是实际表)应用联接,以合并结果。

硬件方法:

  • 主板和磁盘控制器上有更多RAM。
  • 其他处理器(可能需要其他SQL Server许可证)。
  • 更快的存储设备。
  • 如果数据在外部SAN设备上,请考虑切换到连接类型更快的设备(光纤通道vs iSCSI,以太网ATA(AoE)或HyperSCSI)

您可以使用Standard and Premium订阅通过Azure扩展性能。 因此,如果查询速度较慢,则总是可以向其扔更多的硬件,而您只有在需要时才能这样做。 您可以将数据库设置为自动扩展,因此,当需求低时,您支付的费用就会减少,而当需求高时,您的工作负载将不会受到影响。

Azure提供了QPI ,它基本上可以确定哪些查询是最昂贵的查询,因此您可以先对其进行优化。

Azure还提供了不同的顾问程序,例如索引顾问程序 ,它将学习如何使用数据库并建议创建或删除索引的建议-最好的事情是它可以为您自动完成。

如果您在考虑本地解决方案,则还应考虑操作系统成本和硬件成本,以及正确设置和配置的时间和成本。 创建地理复制设置会增加另一级别的复杂性。 因此,如果您需要重新开始,并且您的业务需求允许使用云服务,那么我想说Azure是一种发展之路,因为它提供了丰富的遥测功能和各种智能数据库功能(并且它们逐月出现)。 同样不要忘记,Azure大约每个​​月都会更新一次,而盒装版本会在半年或更长时间后获得累积更新包。

硬件非常重要,越快越好。 但是您还需要检查性能方面的查询。 例如,

  1. 使用实际的执行计划检查缺少的索引。 如果有,则必须添加。
  2. 了解如何阅读执行计划和统计信息。 CPU成本很重要。 表扫描是致命的:)不要使用。
  3. 经常重建索引。
  4. 如果使用ms-sql,则在表之后需要“ NOLOCK”属性,否则在读取/选择时锁定表。

  5. 当您加入表时,请尝试添加加入条件。 不是“ where子句”

例如

SELECT *从带有(NOLOCK)内联接的表A中的表(带有NOLOCK)的表B中A.ID = B.ID,其中B.SOMECOLUMN不为空

SELECT *从具有(NOLOCK)内联接的表A中具有(NOLOCK)的表B中A.ID = B.ID 和B.SOMECOLUMN不为空

第二个更好。

  1. 如有必要,请避免使用“ ORDER BY”,“ DISTINCT”。

:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM