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

时间:2016-05-17 22:32:06

标签: sql sql-server azure

我有一个项目,我有非常复杂的查询(遗留项目) 项目中有很多查询,存储过程等。 查询有10-30个连接和慢速过滤。 项目不能立即修改(至少需要一年的工作)

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

硬件方法:

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

答案 2 :(得分:0)

您可以使用Standard and Premium订阅来扩展Azure的性能。因此,如果您的查询速度很慢,您可以随时投入更多硬件,而只有在需要时才能获得这样的优势。您可以将数据库设置为自动扩展,因此当您需求较低时,您需要支付较少的费用,而当数据需求较高时,您的工作负载不会受到影响。

Azure提供QPI,它基本上可以识别哪些查询是最昂贵的查询,因此您可以先优化它们。

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

如果您正在考虑使用本地解决方案,则应考虑操作系统成本和硬件成本以及设置和正确配置的时间和成本。创建地理复制设置可能会增加另一层复杂性。因此,如果您需要重新开始并且您的业务需求允许云服务,我会说Azure是可行的方式,因为它提供了丰富的遥测和各种智能数据库功能(并且它们将逐月推出)。另外,请不要忘记,Azure每个月大致更新,而版本在半年或更长时间后获得累积更新包。

答案 3 :(得分:0)

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

  1. 使用实际执行计划检查缺失的索引。如果有, 你必须添加。
  2. 学习如何阅读执行计划&静电。 cpu成本 很重要表扫描是致命的:)不要使用。
  3. 经常重建索引。
  4. 如果您使用的是ms-sql,则需要“NOLOCK”属性 在桌子之后,否则你在阅读/选择时锁定你的桌子。

  5. 当您加入表格时,请尝试在加入时添加条件。不 “where clause”

  6.   

    例如

         

    SELECT * FROM TABLE A WITH(NOLOCK)INNER JOIN TABLE B WITH(NOLOCK)   ON A.ID = B.ID    WHERE B.SOMECOLUMN不为空

         

    SELECT * FROM TABLE A WITH(NOLOCK)INNER JOIN TABLE B WITH(NOLOCK)   ON A.ID = B.ID AND B.SOMECOLUMN不为空

         

    第二个更好。

    1. 如果没有必要,请避免使用“ORDER BY”,“DISTINCT”。
    2. :)