例如:
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的?
参考:短路评估
我正在努力优化一些使用频繁的存储过程并遇到一个场景,提出了一个我无法找到任何答案的问题:在存储过程中评估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时从不执行该语句?
如果它从未或有时只是,那么我们就会有一些重写.
我有一个问题:
SELECT
someFields
FROM
someTable
WHERE
cheapLookup=1
AND (CAST(someField as FLOAT)/otherField)<0.9
Run Code Online (Sandbox Code Playgroud)
那么,CAST在这种情况下cheapLookup是否会执行和划分0?如果没有,在这种情况下如何避免计算?
我有一个关于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中依赖它.