where子句执行顺序以及过滤

sj6071 2009-12-16 10:07:09

/*
tb
id 主键 自增 int
字段1 NVARCHAR(50)
bid 外键 int 本表做了索引
*/

select
id
from
tb
where bid=1 and charindex('AAA',字段1)>0


1.在MSSQL2005中where子句的执行顺序是怎么样的
2,如果先执行BID=1过滤是不是后面的条件在过滤后的记录中再进行查找?大大缩小了查找范围?
...全文
294 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyi3317 2009-12-16
  • 打赏
  • 举报
回复
帮顶,学习
wxd024 2009-12-16
  • 打赏
  • 举报
回复
帮顶,学习
sj6071 2009-12-16
  • 打赏
  • 举报
回复
是不是先执行BID=1过滤?后面的条件在过滤后的记录中再进行查找?大大缩小了查找范围?
--小F-- 2009-12-16
  • 打赏
  • 举报
回复
SQL Server 会根据你的索引情况和数据分布情况自行优化处理
--小F-- 2009-12-16
  • 打赏
  • 举报
回复
SQL Select语句完整的执行顺序: 

1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。


另外:一个查询语句各个部分的执行顺序:
--8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
--(1) FROM <left_table>
--(3) <join_type> JOIN <right_table>
--(2) ON <join_condition>
--(4) WHERE <where_condition>
--(5) GROUP BY <group_by_list>
--(6) WITH {CUBE | ROLLUP}
--(7) HAVING <having_condition>
--(10) ORDER BY <order_by_list>
sj6071 2009-12-16
  • 打赏
  • 举报
回复
拿我的这个语句是不是先执行了BID=1过滤后再执行后面的1andcharindex('AAA',字段1)>0
判断?
dawugui 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 sj6071 的回复:]
SQL code/*
tb
id 主键 自增 int
字段1 NVARCHAR(50)
bid 外键 int 本表做了索引*/select
idfrom
tbwhere bid=1andcharindex('AAA',字段1)>0
1.在MSSQL2005中where子句的执行顺序是怎么样的
2,如果先执行BID=1过滤是不是后面的条件在过滤后的记录中再进行查找?大大缩小了查找范围?
[/Quote]
理论上是SQL SERVER会自动去优化执行的顺序.
SQL77 2009-12-16
  • 打赏
  • 举报
回复
看一下执行计划,
Zoezs 2009-12-16
  • 打赏
  • 举报
回复
一般情况都会优先选择有所以的条件执行。
ACMAIN_CHM 2009-12-16
  • 打赏
  • 举报
回复
SQL Server 会根据你的索引情况和数据分布情况自行优化处理。
如果没有任何索引,则是全表扫描,SQL SERVER会对表中每一条记录进行这个bid=1 and charindex('AAA',字段1)>0运算
bancxc 2009-12-16
  • 打赏
  • 举报
回复
先执行哪个 优化器说了算
kevin_long 2009-12-16
  • 打赏
  • 举报
回复
请教一下 查询计划怎么看呢?
忆轩辕 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sj6071 的回复:]
拿我的这个语句是不是先执行了BID=1过滤后再执行后面的1andcharindex('AAA',字段1)>0
判断?
[/Quote]

只能说不清楚,具体要看查询计划
ai_li7758521 2009-12-16
  • 打赏
  • 举报
回复
多个并行条件应该是同时处理的。
ai_li7758521 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sj6071 的回复:]
是不是先执行BID=1过滤?后面的条件在过滤后的记录中再进行查找?大大缩小了查找范围?
[/Quote]查看执行计划

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧