我正在编写一个有点复杂的sql查询-恐怕-执行起来很麻烦。因此,我想知道MS SQL Server的工作原理。
如果存在诸如ex1和ex2之类的逻辑表达式,服务器是否总是对它们两个都求值?是否总是先评估ex1,然后评估ex2(如果需要)? 是否已指定,我可以依靠它吗?
答案 0 :(得分:2)
您所指的是捷径评估。而且,是的,如果SQL Server正在评估表达式,并且它评估的第一个表达式为false,则它不会(有必要)评估第二个表达式。
对此有一些警告。首先,您无法知道哪个SQL Server选择首先评估。如果一个便宜,另一个便宜(例如用户定义的函数),则可以使用case
表达式控制执行顺序。
第二,对表达式的求值通常不是,这需要花费时间来查询。读取数据和匹配行以进行联接和聚合通常是查询的耗时部分。因此,专注于微优化可能并不能真正帮助您获得性能。
答案 1 :(得分:-1)
服务器首先评估 exp1 ,如果为true,则评估 exp2 ,如果 exp1 为false,则 exp2 未评估
Sql'和'逻辑运算的工作方式不同于'或'运算