[英]SQL query execution order
如果我有這樣的LINQ
查詢:
query.OrderBy(e => e.Name).Where(e => e.Name.Contains("Test")).Take(10);
ORDERBY
、 WHERE
和TAKE
的執行順序是什么。
ORDERBY
是僅對匹配搜索條件的記錄執行還是對整個表執行?TAKE 10 records
,還是在獲得 10 條符合條件的記錄時停止搜索?linq 代碼的背后是一個 SQL 查詢。 在 SQL 中,您無法選擇查詢的執行方式。 這是一種描述性語言,您可以在其中告訴數據庫您想要什么結果,然后讓它找出最有效的方法。
我們有一些思維路徑可以理解 SQL 代碼(例如:首先執行from
子句,然后執行where
子句,然后group by
如果有的話),然后select
最后order by
) - 但數據庫不一定遵循該模式. 執行計划通常構建為有向無環圖,提供更大的靈活性。
它按此順序發生 -
WHERE 謂詞用於過濾結果,
THEN ORDER BY 排序和
THEN 10 from that,這恰好是 TOP 10 語法。
通過運行“包括實際執行計划”的查詢,您可以很容易地看到它在 SQL 服務器中是如何執行的。
這是我用來演示的查詢加上 output。 抱歉不得不使用 Ozar 的工具,因為在 SO 上獲取圖像可能很煩人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.