• SQL SERVER性能调优之三(TSQL优化)


    SQL SERVER性能调优之三(T-SQL优化)

    (一)T-SQL原则

    1、不要在OLTP服务器做统计和报表运行,应该讲Group by等类似的统计语句放到单独的服务器运行(即OLTP和OLAP分开),可以采用手工或者MS SQL复制将统计的数据分发到OLAP服务器。

    2、T-SQL是否返回了过多的数据?客户端真的需要这么多数据吗?返回过多的数据意味很多的IO操作,频繁的执行类似语句对IO CPU均会产生压力。

    3、索引是否符合SAGE。

    4、是否将频繁执行语句封装成了储存过程?可以减少网络流量,减少执行计划的编译时间。

    5、程序员是否执行大量的游标语句?一切关系型数据库都是擅长集合运算。

    6、客户端调用的SP中,是否SET NOCOUNT ON?不关闭该选项的话,服务器会发送消息给客户端,增加了网络流量。

    7、事务还能更短吗?过长的事务意味持有锁的时间也越长,事务应该越短越好。

    (二)优化示例(不断更新中):

    1、UNION和UNION ALL比较

    View Code
    --建立示例表
    CREATE TABLE UNION_TEST1
      (
         ID INT
      )
    
    go
    
    CREATE TABLE UNION_TEST2
      (
         ID INT
      )
    
    go
    
    --插入示例数据
    DECLARE @i INT
    
    SET @i=1
    
    WHILE @i < 1000
      BEGIN
          INSERT INTO UNION_TEST1
          SELECT @i
    
          INSERT INTO UNION_TEST2
          SELECT 10000+@i
    
          SET @i=@i + 1
      END
    
    
    
    SELECT ID
    FROM   UNION_TEST1
    UNION
    SELECT ID
    FROM   UNION_TEST2
    
    
    SELECT ID
    FROM   UNION_TEST1
    UNION ALL
    SELECT ID
    FROM   UNION_TEST2  

    如果两个联合的记录没有重复数据应该使用UNION ALL。

    比较执行计划(发现明显消耗影响,这个例子大概相差5倍)

    2、SAGE例子

    View Code
    --建立示例表
    CREATE TABLE SAGE_test
      (
         ID INT
      )
    
    --建立索引
    CREATE INDEX idx_id
      ON sage_test(ID)
    
    
    --插入示例数据
    DECLARE @i INT
    
    SET @i=1
    
    WHILE @i < 100000
      BEGIN
          INSERT INTO SAGE_test
          SELECT @i
    
          SET @i=@i + 1
      END
    
    SET statistics io ON
    
    SELECT ID
    FROM   SAGE_test
    WHERE  ID = 3
    
    SELECT ID
    FROM   SAGE_test
    WHERE  Abs(ID) = 3  

    对应的统计信息,消耗差异明显。

    表 'SAGE_test'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'SAGE_test'。扫描计数 1,逻辑读取 270 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

  • 相关阅读:
    Memcached存储溢出
    Memcached windows安装
    Memcached简介
    HTTP请求中怎样选择Get和Post方式
    【cogs 597】【dp】交错匹配
    &lt;LeetCode OJ&gt; 58. Length of Last Word
    codevs1051
    最重要的 Java EE 最佳实践
    android-xBuild apk差分与合成,zip差分与合成,lua打包,apk打包,png/jpg图片压缩
    [Phonegap+Sencha Touch] 移动开发26 Android下的sencha touch程序,转屏时,Ext.Viewport不能触发orientationchange事件的解决的方法
  • 原文地址:https://www.cnblogs.com/slade/p/2476176.html
Copyright © 2020-2023  润新知