有没有给别人做图赚钱的网站,装修招标网站,软件开发工具和环境,游戏网站appSQLSERVER中如何忽略索引提示 原文:SQLSERVER中如何忽略索引提示SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候#xff0c;我们一般会在查询语句里加索引提示#xff0c;就像这样 SELECT id,name from TB with (index(IX_xttrace_bal)) where bal… SQLSERVER中如何忽略索引提示 原文:SQLSERVER中如何忽略索引提示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
GOIF DB_ID(Trace8602) IS NOT NULLDROP DATABASE Trace8602
GOCREATE DATABASE Trace8602
GOUSE Trace8602
GOCREATE TABLE xttrace8602(id INT IDENTITY(1, 1)PRIMARY KEY ,bal INT ,name VARCHAR(100))
GOCREATE NONCLUSTERED INDEX IX_xttrace8602_bal_name ON xttrace8602(bal,name)
GO
CREATE NONCLUSTERED INDEX IX_xttrace8602_bal ON xttrace8602(bal)
GOINSERT INTO xttrace8602
VALUES ( RAND() * 786, cnblogs.com/lyhabc )
GO 10000CREATE PROC uspFirst
ASSELECT id ,nameFROM 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 posted on 2014-11-11 23:50 NET未来之路 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/lonelyxmas/p/4090856.html