[英]Does the ORDER BY clause return a Virtual Table?
我的理解是關系表沒有排序。
我還了解查詢執行的每個步驟或階段都會返回一個“虛擬表”,該表作為輸入傳遞給下一階段。
但是,如果表從未真正排序,那么在 ORDER BY 階段期間/之后會發生什么?
我只是想了解這樣的查詢可能會發生什么:
SELECT col1, col2
FROM mytable
ORDER BY col1
LIMIT 1;
編輯:
澄清。 我知道上面的查詢輸出什么。 我試圖更好地理解底層執行的每個階段/步驟。
上述查詢的(邏輯)執行順序(編輯:不同於物理執行)將是:
FROM
SELECT
ORDER BY
LIMIT
我試圖了解在ORDER BY
階段發生了什么。 我的理解是一個虛擬表從SELECT
階段傳遞到ORDER BY
階段(在這種情況下,一個帶有col1
和col2
的表,但我不知道ORDER BY
返回什么,然后傳遞給LIMIT
。
ORDER BY 子句是否返回虛擬表?
有時。
數據庫引擎盡可能多地嘗試不生成物化結果集(您稱為虛擬表)。 大多數情況下,逐一處理行會更有效,因此每個執行步驟可以連續處理它們,直到它們返回到客戶端應用程序。
然而,這並不總是可能的。 在這種情況下,引擎被迫實現一個中間結果,該結果實際上采用您正在考慮的形式。 但同樣,這是昂貴的,通常是避免的。
上述查詢的(邏輯)執行順序為:FROM SELECT ORDER BY LIMIT
不,這只是 SQL 查詢的編寫方式,與實際執行步驟無關。 將該序列作為一個很好的教學工具,[僅用於學習目的]有助於了解結果是如何產生的。 在幕后,引擎以各種方式作弊,以盡可能少的努力來產生您要求的結果。 如果你看到它,你不會相信它。
使用 ORDER BY 時不會對基礎表進行排序,僅對 SELECT 語句返回的結果進行排序。 該查詢將從mytable
返回第一個結果。 由於默認順序是 ASCENDING,因此它將是col1
中的最小值。
訂單在表中未知,並且根據定義未排序
作為沒有ORDER BY
的 SELECT 的最終產品的結果集也是未排序的。
但由於ORDER BY
是 LIMIT 和 OFFSET 之前的倒數第二個命令,因此結果集按特定順序排列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.