SQL“何时”情况与“何处”效率

时间:2019-06-20 15:30:54

标签: sql sql-server

对不起,我编辑了查询。

很抱歉,是否曾经有人问过我,但是我找不到任何答案。哪个更有效:

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

OR

Select SUM(Col1) From myTable where col2=2

还是它们的速度相同?

2 个答案:

答案 0 :(得分:1)

第二个效率更高:

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

在某些情况下,它们似乎花费了相同的时间,尤其是在小桌子上。

答案 1 :(得分:1)

肯定第二个应该更快。这是因为“访问权限” 的概念。访问是指查询需要检索以产生结果的数据量。这对数据库引擎优化器决定将其包括在执行计划中的“运算符”有很大影响。

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

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

create index ix1 on myTable (col2);

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