簡體   English   中英

ORDER BY 子句是否返回虛擬表?

[英]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階段(在這種情況下,一個帶有col1col2的表,但我不知道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.

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