簡體   English   中英

這個子選擇是在where子句之前還是之后執行的?

[英]Will this subselect be executed before or after the where-clause?

表A有500'000條記錄:

id, text, created, b_id

表B有20'000條記錄:

id, text

A.b_id is FK to b.id

所以當我做以下事情時:

SELECT text, created, (SELECT b.text FROM b WHERE b.id = A.b_id) FROM a WHERE created < now()

或者也

SELECT text, created, (SELECT b.text FROM b WHERE b.id = A.b_id) FROM a LIMIT 0,10

子選擇是否會 WHERE子句之后執行,因此實際上只對where created < now() resp的記錄執行。 僅在前十條記錄上或者在排除發生之前是否會在每條記錄上執行?

謝謝!

您應該了解SQL連接 - 例如:

SELECT a.text, a.created, b.text
FROM   a JOIN b ON b.id = a.b_id
WHERE  a.created < NOW()
LIMIT  0, 10

但是,要回答有關相關子查詢的問題:

子選擇是否會在WHERE子句之后執行,因此實際上只對創建<now()resp的記錄執行。 僅在前十條記錄上或者在排除發生之前是否會在每條記錄上執行?

只有在應用了過濾器/限制之后,才會對父查詢返回的記錄評估子查詢。

子查詢不會自行執行。 整個查詢將由查詢規划器轉換為更類似於具有外部聯接的查詢的內容。

因此,子查詢不會針對來自其他表的每個記錄執行,也不會針對中間結果的每個記錄執行。 它將與主查詢結合執行一次。

查詢計划的最終結果取決於您對表有哪些索引,以及表的統計信息告訴查詢計划程序。

暫無
暫無

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

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