多个Case When语句的性能优化

耳元 60 信誉分
2024-03-26T02:24:43.4266667+00:00

我有一个查询语句里面包含了很多Case When,执行时间还挺长的。有没有什么替代语法可以优化?我看有建议说在条件判断的列上面加索引,是否可行?

SQL Server
SQL Server
Microsoft 关系数据库管理和分析系统的一个系列,用于实现电子商务、业务线和数据仓库解决方案。
105 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. CosmogHong-MSFT 24,106 信誉分 Microsoft 供应商
    2024-03-26T02:50:23.6133333+00:00

    使用CASE WHEN 将逻辑合并到数据库层可以提高性能,因为它减少了应用程序代码中额外处理的需要。

    为了确保在使用多个Case When条件时获得最佳性能,需考虑以下几点:

    • 保持逻辑尽可能简单,以避免过于复杂和难以维护的查询。
    • 确保条件是相互排斥的,以防止出现意外结果。
    • 如果频繁查询,请考虑对Case When条件中使用的列建立索引,以提高性能。

    如果答案是正确的解决方案,请点击“接受答案”并投赞成票。如果您对此答案有其他疑问,请点击“评论”。

    0 个注释 无注释

1 个其他答案

排序依据: 非常有帮助
  1. 博雄 胡 90 信誉分
    2024-04-02T10:13:32.3566667+00:00

    不可行,在原理上提升有限,在我经历过的大多数场景下毫无有效提升。

    应该在where条件列上加索引,并把case when 中的字段放入在包含性列include中。

    case when本身没有啥值得说的,因为它没有什么有效手段优化。值得注意的是里面不要用会访问用户表的自定义函数,更为正确的说法是不要在select 之后的任何地方使用,否则会让sql完全放弃并行而使用单线程,导致特别慢。这种情况再实际场景中最容易发生。

    0 个注释 无注释