簡體   English   中英

SQL 查詢執行順序

[英]SQL query execution order

如果我有這樣的LINQ查詢:

query.OrderBy(e => e.Name).Where(e => e.Name.Contains("Test")).Take(10);

ORDERBYWHERETAKE的執行順序是什么。

  1. ORDERBY是僅對匹配搜索條件的記錄執行還是對整個表執行?
  2. 它會在整個表中搜索搜索條件,然后執行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 上獲取圖像可能很煩人。

https://www.brentozar.com/pastetheplan/?id=H1v7h-q6D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM