作为一些动态SQL(ick)的一部分,我已经实现了最后的“排序”#NULL;此处描述的解决方案:Sorting null-data last in database query
ORDER BY CASE column WHEN NULL THEN 1 ELSE 0 END, column
我的问题是:在应用了ISNULL()的非可空列上,查询优化器会在意识到它永远不会应用时将其删除吗?
答案 0 :(得分:0)
当您的问题不在您的代码中时,为什么您的问题会提到ISNULL
函数,这一点尚不清楚。
ORDER BY CASE column WHEN NULL THEN 1 ELSE 0 END, column
首先,这段代码不起作用,它等同于CASE WHEN column = NULL
,而不是你需要的。
需要
ORDER BY CASE WHEN column IS NULL THEN 1 ELSE 0 END, column
优化问题很容易测试。
CREATE TABLE #T
(
X INT NOT NULL PRIMARY KEY
)
SELECT *
FROM #T
ORDER BY X
SELECT *
FROM #T
ORDER BY CASE WHEN X IS NULL THEN 1 ELSE 0 END, X
DROP TABLE #T
该计划在第二个计划中显示了一个排序操作,表明它没有按照您的希望进行优化,并且模式的效率低于ORDER BY X
。