gpt4 book ai didi

sql - 使用 order by 时的动态 order by - 加速

转载 作者:行者123 更新时间:2023-12-04 20:55:35 25 4
gpt4 key购买 nike

我正在使用行号从存储过程中获取分页结果。

我发现使用动态 case 语句列名称进行排序会减慢速度 - 但如果我对所有内容进行硬编码就可以了。

有没有办法通过不使整个 sql 查询一个字符串并使用 SP_EXECUTESQL 来加快动态顺序

            ROW_NUMBER() OVER (ORDER BY 
CASE WHEN @OrderByColumnName = 'IdentityValue' AND @OrderAscending = 0 THEN CLH.IdentityValue END DESC,
CASE WHEN @OrderByColumnName = 'IdentityValue' AND @OrderAscending = 1 THEN CLH.IdentityValue END
--CLH.CustomerName

) AS [ROW]

最佳答案

问题是 SQL Server 试图构建一个执行计划来适应所有参数。这意味着当您给它不同的参数时,它不会改变主意并选择不同的索引。 (different index 部分很重要,因为重新排序不合适的索引的负载可能非常高。)

发生这种情况的唯一方法是生成一个新的执行计划,这涉及动态 SQL - 这正是您想要避免的。

然而;动态 SQL 和 SP_EXECUTESQL 不一定是个坏主意。由于它也可以参数化,正确使用确实允许重用执行计划,并且可以非常有效地处理这些类型的问题。

您是否有需要避免动态 SQL 的特定原因?

唯一可行的解​​决方法是多次写出查询,使用不同的顺序,然后选择哪个与 T-SQL 一起使用 IF块。这将允许优化器生成不同的执行计划。

关于sql - 使用 order by 时的动态 order by - 加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com