sql-server – 是否在ISNULL中包装可空的列导致表扫描?
Visual Studio 2010数据库项目的代码分析规则
SR0007指出:
但是当以下情况违反代码分析规则SR0006时:
这是否也适用于ISNULL,还是ISNULL不会导致表扫描? 解决方法是的,它会导致表扫描. (虽然似乎优化了,如果列实际上不可空)SR0007规则是非常糟糕的一般建议,因为它使谓词不可缩放,意味着该列上的任何索引将无用.即使列上没有索引,它仍然可能使基数估计不准确影响计划的其他部分. 它在Microsoft.Performance类别中的分类是相当有趣的,因为它似乎是由没有了解查询性能的人写的. 它声称的理由是
虽然表达式本身确实评估为未知,但您的代码在您明白any =,>,<等于NULL与NULL进行比较,评估为“未知”,并且WHERE子句仅返回表达式求值为true的行. 这可能意味着如果
执行计划显示扫描对寻求或下面 CREATE TABLE #foo ( x INT NULL UNIQUE ) INSERT INTO #foo SELECT ROW_NUMBER() OVER (ORDER BY @@SPID) FROM sys.all_columns SELECT * FROM #foo WHERE ISNULL(x,10) = 10 SELECT * FROM #foo WHERE x = 10 SELECT * FROM #foo WHERE x = 10 OR x IS NULL (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows7下Microsoft SQL Server 2008安装图解和注意事项
- SQL Server数据库的高性能优化经验总结
- 使用INSERT覆盖cassandra中的行,是否会导致墓碑?
- 【实战问题】【11】增删改查在SQLServer客户端都是正常的。
- sql-server-2008 – VS 2010构建数据库项目接收SQL04151
- sqlserver 游标存储过程实例
- SQLSERVER排查CPU占用高的情况
- ===================阿拉伯数字转大写中文=============
- .net – 实体框架4.0中的批处理数据库命令
- Sqlserver通过链接服务器访问Oracle