我有一个表,我想对其进行分页和排序,并且能够获得类似于以下内容的查询来完成工作(真正的查询更多地涉及连接等)。
WITH NumberedPosts (PostID, RowNum) AS
(
SELECT PostID, ROW_NUMBER() OVER (ORDER BY
CASE WHEN @sortCol = 'User' THEN User END DESC,
CASE WHEN @sortCol = 'Date' THEN Date END DESC,
CASE WHEN @sortCol = 'Email' THEN Email END DESC) as RowNum
FROM Post
)
INSERT INTO #temp(PostID, User, Date, Email)
SELECT PostID, User, Date, Email
FROM Post
WHERE NumberedPosts.RowNum BETWEEN @start and (@start + @pageSize)
AND NumberedPosts.PostID = Post.PostID
ORDER BY Date desc
问题在于,与普通子句相比,使用 CASE 语句时性能会严重下降(至少减速 10 倍) 。查看查询计划,所有列似乎仍在排序,即使它们与 @sortCol 限定符不匹配。
有没有办法让它以接近“本机”的速度执行?动态 SQL 是解决这个问题的最佳选择吗?谢谢!