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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM