相关疑难解决方法(0)

是否对SQL WHERE子句进行了短路评估?

例如:

SELECT * 
FROM Table t 
WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) 
Run Code Online (Sandbox Code Playgroud)

如果@key IS NULL的计算结果为true,那么@key IS是否为NULL并且@key = t.Key是否已计算?

如果不是,为什么不呢?

如果是,是否有保证?它是ANSI SQL的一部分还是特定于数据库?

如果是数据库特定的,SqlServer?甲骨文?MySQL的?

参考:短路评估

sql short-circuiting

135
推荐指数
6
解决办法
5万
查看次数

SQL Server是否会短路IF语句?

我正在努力优化一些使用频繁的存储过程并遇到一个场景,提出了一个我无法找到任何答案的问题:在存储过程中评估TSQL时,SQL Server是否会使IF语句短路?

例如,假设存储过程的代码类似于:

IF @condition1 = 1
OR EXISTS(SELECT 1 FROM table1 WHERE column1 = @value1)
...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SQL Server是否会使评估短路,以便EXISTS在前面的子句计算结果为true时从不执行该语句?

如果它从未或有时只是,那么我们就会有一些重写.

t-sql sql-server query-optimization short-circuiting

13
推荐指数
1
解决办法
3182
查看次数

Sql Server谓词懒惰?

我有一个问题:

SELECT 
    someFields 
FROM 
    someTable 
WHERE 
    cheapLookup=1 
    AND (CAST(someField as FLOAT)/otherField)<0.9
Run Code Online (Sandbox Code Playgroud)

那么,CAST在这种情况下cheapLookup是否会执行和划分0?如果没有,在这种情况下如何避免计算?

sql-server lazy-evaluation sql-server-2008

8
推荐指数
2
解决办法
4829
查看次数

OR的表现?

可能重复:
SQL Server - 查询短路?
是否对SQL WHERE子句进行了短路评估?

我有一个关于T-SQL(SQL Server 2005)中逻辑OR运算符性能的问题.

我搜索了一下,但我找不到任何关于这个问题的内容.

如果您有以下查询:

SELECT * FROM Table WHERE (randomboolean OR HeavyToEvaluateCondition)
Run Code Online (Sandbox Code Playgroud)

randomboolean在第一个条件成立的情况下,为了节省性能,程序解释器是否会尽可能地跳过评估重型条件?

由于OR语句中的一个值为true,因此我们不必评估第二个条件,因为我们已经知道满足第一个条件!

我知道它在C#中是这样的,但我想知道我是否也可以在T-SQL中依赖它.

t-sql sql-server-2005 database-performance

2
推荐指数
1
解决办法
236
查看次数