sql运算符优先级及逻辑处理顺序--查询sql执行顺序

sql运算符优先级及逻辑处理顺序--查询sql执行顺序,第1张

sql运算符优先级及逻辑处理顺序--查询sql执行顺序

sql逻辑处理顺序

--开启和关闭查询

--SET STATISTICS TIME ON-------------------------------------------
--请先来看看SET STATISTICS TIME ON会返回什么信息。


先运行语句:
DBCC DROPCLEANBUFFERS
--清除buffer pool里的所有缓存数据
DBCC freeproccache
GO

--清除buffer pool里的所有缓存的执行计划
SET STATISTICS TIME ON

GO

set statistics profile on
set statistics io on
set statistics time on
go
select * from hk_orders a left join hk_orders_sub b on a.order_no=b.order_no

set statistics profile off
set statistics io off
set statistics time off

执行完图片:

执行字段说明 :set statistics profile on :

Rows:执行计划每一步返回的实际行数

Executes:执行计划每一步执行的次数

StmtText:执行计划的具体内容,每一步都有自己的执行内容,且有结果返回,当然每执行一次,都会花费系统资源(时间 cpu 内存)

EstimateRows:SQL Server预估每一步执行返回的行数,我们经常将EstimateRows与Rows的值进行对比,确认SQL Server是否预估准确

EstimateIO:SQL Server预估每一步执行所花费的I/O资源

EstimateCPU:SQL Server预估每一步执行所花费的CPU资源

TotalSubtreeCost:SQL Server根据EstimateCPU和EstimateIO来计算出的每一步执行计划的cost(该值包括了自己和该树下所有子树执行计划的cost的总和

Warnings:SQL Server预估所预告的警告(例如:某一步执行没能找到统计信息支持SQL Server预估)

Parallel:是否使用了并行的执行计划

StmtText字段具体说明:

1. 【Table Scan】:遍历整个表,查找所匹配的记录行。


这个 *** 作将会一行一行的检查,当然,效率也是最差的。



2. 【Index Scan】:根据索引,从表中过滤出来一部分记录,再查找所匹配的记录行,显示比第一种方式的查找范围要小,因此比【Table Scan】要快。



3. 【Index Seek】:根据索引,定位(获取)记录的存放位置,然后取得记录,因此,比起前二种方式会更快。



4. 【Clustered Index Scan】:和【Table Scan】一样。


注意:不要以为这里有个Index,就认为不一样了。


其实它的意思是说:按聚集索引来逐行扫描每一行记录,因为记录就是按聚集索引来顺序存放的。


而【Table Scan】只是说:要扫描的表没有聚集索引而已,因此这二个 *** 作本质上也是一样的。



5. 【Clustered Index Seek】:直接根据聚集索引获取记录,最快!

查看执行开销:https://jingyan.baidu.com/article/f0e83a256b73f322e59101a4.html

执行优化详解:https://www.cnblogs.com/lyhabc/articles/3222180.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/589442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存