优化实例
zjcxc
这个作者很懒,什么都没留下…
展开
-
避免在 SQL Server 中盲目地追求一句处理
问题描述 业务需求如下: 有表A和表B,这两个表结构一致,为不同的业务服务,现在要写一个存储过程,存储过程接受一个参数,当参数为0时,查询表A,参数为1时,查询表B。 A、一般的处理方法IF @Flag = 0 SELECT * FROM dbo.AELSE IF @Flag = 1 SELECT * FROM原创 2006-06-10 20:55:00 · 5092 阅读 · 7 评论 -
避免把判断处理放入 WHERE 条件
问题描述 业务需求如下: 有表A,在查询的时候,需要根据标志确定是查询大于某个值的记录,还是小于某个值的记录 A、一般的处理方法IF @a = 0 SELECT [TranNumber] FROM A WHERE [TranNumber] 10000ELSE IF @a = 1 SELECT [TranNumber]原创 2006-06-14 19:53:00 · 5618 阅读 · 6 评论 -
TOP 1比不加TOP慢的疑惑
问题描述:有一个查询如下,去掉TOP 1的时候,很快就出来结果了,但加上TOP 1的时候,一般要2~3秒才出数据,何解?SELECT TOP 1 A.INVNO FROM A, BWHERE A.Item = B.ItemNumber AND B.OwnerCompanyCode IS NOT NULL 问题原因分析:在使用TOP原创 2006-07-10 11:30:00 · 15119 阅读 · 10 评论 -
SQL各种写法的效率问题
问:(1)一次插入多条数据时:CREATE TABLE tb(ID int, 名称 NVARCHAR(30), 备注 NVARCHAR(1000))INSERT tb SELECT 1,DDD,1UNION ALL SELECT 1,5100,DUNION ALL SELECT 1,5200,E 也可以这样:原创 2006-07-15 21:40:00 · 14575 阅读 · 6 评论 -
游标类型产生的数据检索问题
表现:将数据库兼容级别从80 改到90 后, 下面的游标循环不出数据, 但单独SELECT 有结果DECLARE MyCursor CURSOR LOCAL READ_ONLYFOR SELECT Col1FROM tbname WITH(NOLOCK) WHERE Name LIKE SNET% AND B_Key IN(原创 2007-05-12 12:30:00 · 4432 阅读 · 0 评论 -
选择合适的游标类型
背景:定义游标的时候, 如果不指定STATIC 关键字的时候, 则默认定义的游标是动态(DYNAMIC) 的动态(DYNAMIC) 游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE 提取选项。因为动态游标会消耗资源去检查基础表的更新, 所以对于复杂的查询, 且不需要反映基础表更新情况的游标处原创 2007-05-12 17:27:00 · 8604 阅读 · 4 评论 -
在 xml.value 中, XPath中使用 text() 函数的重要性
被多次问到,为什么在DBA的规范中,会要求在解析xml值时,value 方法的 XPath 中要加 text() 函数,看起来似乎加与不加得到的结果都是一样的。 下面的测试脚本说明使用 text() 的区别,以及为什么要求使用它。DECLARE @xml xmlSET @xml = N'b c';SELECT @xml.value('(/a)[1]', 'varchar(10)原创 2012-11-20 17:38:12 · 11233 阅读 · 1 评论 -
也谈SQL Server 2008 处理隐式数据类型转换在执行计划中的增强
在 SQL Server 查询中,不经意思的隐匿数据类型转换可能导致极大的查询性能问题,在 SQL Server 2008 及之后的版本中,这种操作做了增强,但还是经常遇到有问题的时候原创 2015-07-02 17:49:32 · 6988 阅读 · 0 评论 -
也谈SQL Server 2008 处理隐式数据类型转换在执行计划中的增强 (续)
在上一篇文章也谈SQL Server 2008 处理隐式数据类型转换在执行计划中的增强 中,我提到了隐式数据类型转换增加对于数据分布很不平均的表,评估的数据行数与实际值有很大出入的问题,进一步测试之后,我发现这种评估不准确性应该确实与猜测的一样,它使用了变量的评估方式原创 2015-07-03 16:58:57 · 6648 阅读 · 0 评论