SQL“case when”与“where”效率

Zuz*_* JH 4 sql sql-server performance

哪个更有效率:

Select SUM(case when col2=2 then col1 Else 0 End) From myTable 
Run Code Online (Sandbox Code Playgroud)

或者

Select SUM(Col1) From myTable where col2=2
Run Code Online (Sandbox Code Playgroud)

或者它们的速度相同吗?

The*_*ler 5

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

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

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

create index ix1 on myTable (col2);
Run Code Online (Sandbox Code Playgroud)

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