当前位置: 首页 > 图文教程 > 数据库 > 数据库技巧 > where 子句的执行顺序

数据库技巧
用计算列实现移动加权平均算法
精通数据库系列之入门-基础篇
精通数据库系列之入门-基础篇2
精通数据库系列之入门-基础篇3
精通数据库系列之入门-技巧篇1
精通数据库系列之入门-技巧篇2
精通数据库系列之入门-技巧篇3
精通数据库系列之入门-技巧篇4
写出高性能SQL语句的35条方法分析
SQL 随机查询 包括(sqlserver,mysql,access等)
在ACCESS和SQL Server下Like 日期类型查询区别
数据库中union 与union all 的区别
修改插入时间不匹配问题
收缩数据库不变小的解决方法
Access和SQL Server里面的SQL语句的不同之处
几种常用DB驱动和DB连接串小结
JDBC大批量写入数据到SQLServer2000,记录数大于10000

数据库技巧 中的 where 子句的执行顺序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 54 ::
收藏到网摘: n/a

貌似在2005之前的版本中,where子句的顺序是从前往后的。但是又貌似在2005的版本中进行了优化,所有的顺序都被统一成了以过滤能力进行排序的语句。 看代码:
复制代码 代码如下:

set statistics io on
set statistics time on
go
set statistics profile on
go
use pubs
select * from authors
where (au_fname like 'S%' or au_fname like 'a%')
and (state like 'CA' or state like 'UT')
and (cast(zip as int) > 90000)
select * from authors
where (au_fname like 'S%' or au_fname like 'a%')
and (cast(zip as int) > 90000)
and (state like 'CA' or state like 'UT')
select * from authors
where (cast(zip as int) > 90000)
and (au_fname like 'S%' or au_fname like 'a%')
and (state like 'CA' or state like 'UT')

目的:想验证where语句的各个条件的查询顺序
环境:SQLServer 2005Express版本
步骤:显示查询计划
结果:无一例外,都被统一成了这样的代码
复制代码 代码如下:

|--Clustered Index Scan(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind]), WHERE:(CONVERT(int,[pubs].[dbo].[authors].[zip],0)>(90000) AND ([pubs].[dbo].[authors].[au_fname] like 'S%' OR [pubs].[dbo].[authors].[au_fname] like 'a%') AND ([pubs].[dbo].[authors].[state] like 'CA' OR [pubs].[dbo].[authors].[state] like 'UT')))

结论:貌似在2005之前的版本中,where子句的顺序是从前往后的。但是又貌似在2005的版本中进行了优化,所有的顺序都被统一成了以过滤能力进行排序的语句。