[英]How to increase SQL Query performance without changing the query
我有一个项目,其中有非常复杂的查询(传统项目),其中有很多查询,项目中的存储过程等。查询的位置从10到30个联接和缓慢的筛选。 无法立即修改项目(将花费至少一年的时间)
是否有硬件方法可以提高性能。 我可以使用一些具有增强计算能力的智能Azure设置来提高速度吗? 或者我需要在物理服务器中寻找什么?
硬件方法:
您可以使用Standard and Premium
订阅通过Azure扩展性能。 因此,如果查询速度较慢,则总是可以向其扔更多的硬件,而您只有在需要时才能这样做。 您可以将数据库设置为自动扩展,因此,当需求低时,您支付的费用就会减少,而当需求高时,您的工作负载将不会受到影响。
Azure提供了QPI ,它基本上可以确定哪些查询是最昂贵的查询,因此您可以先对其进行优化。
Azure还提供了不同的顾问程序,例如索引顾问程序 ,它将学习如何使用数据库并建议创建或删除索引的建议-最好的事情是它可以为您自动完成。
如果您在考虑本地解决方案,则还应考虑操作系统成本和硬件成本,以及正确设置和配置的时间和成本。 创建地理复制设置会增加另一级别的复杂性。 因此,如果您需要重新开始,并且您的业务需求允许使用云服务,那么我想说Azure是一种发展之路,因为它提供了丰富的遥测功能和各种智能数据库功能(并且它们逐月出现)。 同样不要忘记,Azure大约每个月都会更新一次,而盒装版本会在半年或更长时间后获得累积更新包。
硬件非常重要,越快越好。 但是您还需要检查性能方面的查询。 例如,
如果使用ms-sql,则在表之后需要“ NOLOCK”属性,否则在读取/选择时锁定表。
当您加入表时,请尝试添加加入条件。 不是“ where子句”
例如
SELECT *从带有(NOLOCK)内联接的表A中的表(带有NOLOCK)的表B中A.ID = B.ID,其中B.SOMECOLUMN不为空
SELECT *从具有(NOLOCK)内联接的表A中具有(NOLOCK)的表B中A.ID = B.ID 和B.SOMECOLUMN不为空
第二个更好。
:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.