首页 > 编程知识 正文

sql数据库,sql语句or和and优先级

时间:2023-05-06 17:34:36 阅读:125295 作者:390

SQL Server不影响WHERE子句中表达式的优先级。 根据运算符的优先顺序进行运算,相同优先顺序的运算符两侧的公式根据评价的成本多寡进行运算,先运算成本小的,然后运算成本大的。

如果主题(或主题所在的项目)对性能敏感,则Sql Server优化程序可以通过优化查询策略(如索引)来“引导”成本较低的表达式和后面的表达式。

“并行操作”概念

SQL支持这一概念。 也就是说,在集成逻辑查询处理阶段出现的所有表达式都是同时计算的。 此块介绍SELECT和WHERE子句。

SELECT子句

下面的代码是错误的。

选择

订单id

yar (订单) as订单year,

orderyear 1 AS nextyear

FROM [DemoDb].dbo.[Orders]

这是因为SELECT子句中的所有列名在逻辑上没有优先级,所以所有表达式都在同一时间执行

WHERE子句

从这里开始,是回答这个回信最前面的话的问题。 关于WHERE子句,我们先来看看这样的例子。

选择col2,col2

FROM [DemoDb].dbo.[T1]

WHERE col1 0 AND col2/col1 2

假设主题想查找col2/col1值大于2的所有col1和col2小故事,但担心除数为零时发生错误,所以在前面添加了col1 0。 问题是,这是否有用。

如果我们的数据库足够机智,按照“短路评价”的原则执行,在将col1设为0时不判断col2/col1 2,似乎就没错了……

不能忘记多功能操作这一概念。 这个概念写在ANSI SQL里。 因此,微软ANSI SQL实现(Microsoft SQL Server )可以按任意顺序处理WHERE子句中的表达式。 (这包括自由支持"短路评估"。 这个选择“偏好”的唯一依据是性能,即成本。 这意味着首先计算成本较低的公式,然后计算成本较高的公式。 如果SQL Server决定先计算表达式col2/col1 2,则除数为零可能会导致错误,查询可能会失败。

总结

楼主不需要在意WHERE子句中表达式的优先级是否会影响查询性能。 优化程序根据运算符的优先级和评估的性能成本,根据评估自动优先进行计算。

楼主可以尝试通过编制索引来减少对IO的需求来提高性能。 同时决定性能的因素很多,包括你的表的设计、硬件、网络等,更具体的信息建议楼主读《Microsoft SQL Server 2008 技术内幕:T-SQL 查询》,系统地了解性能的相关信息。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。