• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQLSERVER中忽略索引提示

    当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样

    复制代码 代码如下:
    SELECT id,name from TB with (index(IX_xttrace_bal)) where bal100

    当在生产环境里面,由于这个索引提示的原因,优化器一般不会再去考虑其他的索引,那有时候这个索引提示可能会导致查询变慢

    经过你的测试,发现确实是因为这个索引提示的关系导致查询变慢,但是SQL服务器已经缓存了这条SQL语句的执行计划,如果修改SQL语句的话可能会有影响

    而且,可能不单只一条SQL语句用了索引提示,还有其他的SQL语句也用了索引提示,你不可能马上去修改这些SQL语句的时候可以使用SQLSERVER里面的一个trace flag

    这个trace flag能忽略SQL语句里面的索引提示和存储过程里面的索引提示

    不需要修改SQL语句,就可以进行性能排查

    运行下面脚本创建数据库和相关索引

    复制代码 代码如下:

    USE master
    GO
    IF DB_ID('Trace8602') IS NOT NULL
        DROP DATABASE Trace8602
    GO
    CREATE DATABASE Trace8602
    GO
    USE Trace8602
    GO
    CREATE TABLE xttrace8602
        (
          id INT IDENTITY(1, 1)
                 PRIMARY KEY ,
          bal INT ,
          name VARCHAR(100)
        )
    GO
    CREATE NONCLUSTERED INDEX IX_xttrace8602_bal_name ON xttrace8602(bal,name)
    GO
    CREATE NONCLUSTERED INDEX IX_xttrace8602_bal ON xttrace8602(bal)
    GO
    INSERT  INTO xttrace8602
    VALUES  ( RAND() * 786, 'cnblogs.com/lyhabc' )
    GO 10000
    CREATE PROC uspFirst
    AS
        SELECT  id ,
                name
        FROM    xttrace8602 TF WITH ( INDEX ( IX_xttrace8602_bal ) )
        WHERE   bal 100
    GO

    现在执行下面代码

    复制代码 代码如下:

    --没有使用跟踪标致
    EXEC uspFirst 
    GO

    复制代码 代码如下:

    --使用了跟踪标志
    DBCC TRACEON(8602,-1)
    GO
    DBCC FREEPROCCACHE
    GO
    EXEC uspFirst
    GO

    可以看到,打开TRACEON(8602,-1) 跟踪标志之后,SQLSERVER忽略了索引提示,利用复合索引IX_xttrace8602_bal_name 把数据查出来

    而不需要额外的键查找

    这个跟踪标志不需要你修改你的SQL语句就可以让SQLSERVER忽略索引提示

    在使用这个8602跟踪标志之前记得先在开发环境测试好,确认是否需要忽略索引提示,以便做成性能问题

    如有不对的地方,欢迎大家拍砖o(∩_∩)o

    您可能感兴趣的文章:
    • sqlserver 聚集索引和非聚集索引实例
    • SQLSERVER 创建索引实现代码
    • sqlserver2005自动创建数据表和自动添加某个字段索引
    • sqlserver索引的原理及索引建立的注意事项小结
    • sqlserver 索引的一些总结
    • SqlServer 索引自动优化工具
    • SQLServer2005重建索引前后对比分析
    • SQLSERVER聚集索引和主键(Primary Key)的误区认识
    • SQLSERVER如何查看索引缺失及DMV使用介绍
    上一篇:总结下sqlserver group by 的用法
    下一篇:SQLSERVERAGENT警告:事件 ID: 312
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQLSERVER中忽略索引提示 SQLSERVER,中,忽略,索引,提示,