IT *_*her 3 performance sql-server execution-plan sql-server-2008-r2 query-performance
对于以下类型的查询,And如果第一个And条件失败,sql是否会为每个条件处理数据?如果某行的 Emp_ID 不是 12,那么它会检查 Emp_Name 的条件吗?那么SQL是如何处理这种查询的呢?
SELECT [Emp_ID],[Emp_Name],[Emp_Sal] FROM [gyh].[dbo].[Employee_Demo] where Emp_ID='12' And Emp_Name like '%ab%'
Run Code Online (Sandbox Code Playgroud)
你说的是短路评估。
与顺序很重要的 CASE 语句(使用变量和聚合函数的某些情况除外)不同,您几乎无法控制WHERESQL Server 中子句的计算顺序(除了一些分组括号)。因此,即使它确实短路,SQL Server 也可能选择首先评估第二个子句,特别是如果它被引用为它选择用于查询的索引中的第一列。
SQL服务器将仍然试图解析整个查询,以确保它在逻辑上是正确的,不管是否第一AND条件失败。
例如,如果我使用 AdventureWorks 数据库并查找我知道不存在的城市:
USE AdventureWorks;
GO
-- obviously don't use SELECT * in production
SELECT
*
FROM Person.Address AS a
WHERE City = 'Bournemouth' AND 1/0 = 1
Run Code Online (Sandbox Code Playgroud)
即使City = 'Bournemouth'永远是FALSE,我仍然收到错误:
Msg 8134, Level 16, State 1, Line 5
Divide by zero error encountered.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |