mysql 查询条件优先级_sql问题之where条件的优先级

在 SQL Server 中,WHERE 子句的表达式先后顺序没有影响。根据运算符的优先级进行运算,相同优先级的运算符两侧的表达式根据评估的代价多寡来运算,先运算代价小的,后运算代价大的。

如果楼主(或楼主所在的项目)对性能比较敏感,可以通过优化查询策略(如利用索引等)来「引导」Sql Server 的优化器先运算代价小的、后运算代价大的表达式。

All-At-Once Operation(同时操作)概念

SQL 支持这种概念,这意味着统一逻辑查询处理阶段中出现的所有表达式都是同时进行计算的。这一块我们可以分别讲讲 SELECT 子句和 WHERE 子句。

SELECT 子句

以下代码是错误的:

SELECT

orderid,

YEAR(orderdate) AS orderyear,

orderyear + 1 AS nextyear

FROM [DemoDb].dbo.[Orders]

原因是:由于 SELECT 子句中所有列名逻辑上没有先后顺序的,所有表达式都是在同一时刻进行的

WHERE 子句

接下来就是回应本回复最早前那句话的问题了,关于 WHERE 子句,我们首先来看这么一个例子:

SELECT col1, col2

FROM [DemoDb].dbo.[T1]

WHERE col1 <> 0 AND col2 / col1 > 2

假设楼主想找 col2 / col1 值大于 2 的所有 col1 和 col2 集,但又担心除数为零出现错误,所以在之前加上了 col1 <> 0。问题在于,这是否有用?

假设咱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值