繁体   English   中英

SQL“case when”与“where”效率

[英]SQL 'case when' vs 'where' efficiency

哪个更有效:

Select SUM(case when col2=2 then col1 Else 0 End) From myTable 

或者

Select SUM(Col1) From myTable where col2=2

还是他们的速度一样?

毫无疑问,第二个应该更快。 这是因为“访问”的概念。 访问是指查询需要检索以产生结果的数据量。 它对数据库引擎优化器决定包含在执行计划中的“操作符”有很大影响。

安全一些例外,第一个查询需要访问所有表行然后计算结果,包括与案例无关的行。

第二个查询仅引用计算结果所需的特定行。 因此,它具有更快的潜力。 为了实现它,索引的存在是至关重要的。 例如:

create index ix1 on myTable (col2);

在这种情况下,它只会访问与过滤谓词col2 = 2匹配的行子集。

第二种更有效:

  • 它通常会处理较少的行(假设存在非“2”值),因为调用聚合函数之前将忽略行。
  • 它允许优化器利用索引。
  • 它允许优化器利用表分区。

在某些情况下,它们可能看起来花费相同的时间,尤其是在小桌子上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM