【发布时间】:2011-01-20 21:04:59
【问题描述】:
我有一个贯穿多个视图和表的 SQL 查询。
查询运行良好,但是当我在 WHERE 子句中添加另一个条件时,它开始对性能产生巨大影响。
查询的结构类似于...
SELECT a.*
FROM vw_myView a
LEFT OUTER JOIN tbl1 b ON a.ID = b.ID
LEFT OUTER JOIN vw_OtherView c ON a.ID = c.ID
LEFT OUTER JOIN tbl2 d ON c.OtherID = d.OtherID
WHERE a.Column1 = 'VALUE'
AND a.Column2 LIKE ISNULL(@parameter, a.Column2)
从上面的查询中,当我在 WHERE 子句中添加另一个条件时,我的查询现在需要很长时间(超过 3 分钟)来执行并返回 1000 条记录。删除添加的条件子句和查询在不到 7 秒内返回记录。
谢谢。 我应该检查什么以查看性能影响巨大的地方
【问题讨论】:
-
实际条件是否添加
AND a.Column2 LIKE ISNULL(NULL, a.Column2)?因为它不应该为查询添加任何值(dud 子句) -
@cyberwiki 不仅是一个无用的条款,而且是一个性能打击
-
编辑了我的答案并提供了一种重写以获得更好性能的方法
标签: sql sql-server tsql sql-server-2000