我讀過連接比子查詢更好。如何理解SQLite`EXPLAIN QUERY PLAN`結果?
但
EXPLAIN QUERY PLAN
SELECT Queue.Id, NULL
FROM Queue
INNER JOIN LastQueue
ON Queue.Id=LastQueue.Id
給
Array
(
[0] => Array
(
[selectid] => 0
[order] => 0
[from] => 0
[detail] => SCAN TABLE Queue (~1000000 rows)
)
[1] => Array
(
[selectid] => 0
[order] => 1
[from] => 1
[detail] => SEARCH TABLE LastQueue USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
)
)
而
EXPLAIN QUERY PLAN
SELECT Queue.Id, NULL
FROM Queue
WHERE (SELECT 1 FROM LastQueue WHERE Queue.Id=LastQueue.Id) IS NOT NULL
給
Array
(
[0] => Array
(
[selectid] => 0
[order] => 0
[from] => 0
[detail] => SCAN TABLE Queue (~500000 rows)
)
[1] => Array
(
[selectid] => 0
[order] => 0
[from] => 0
[detail] => EXECUTE CORRELATED SCALAR SUBQUERY 1
)
[2] => Array
(
[selectid] => 1
[order] => 0
[from] => 0
[detail] => SEARCH TABLE LastQueue USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
)
)
我想我必須乘以行數來獲得成本的概念。我是對的?
然後,
- 使用連接:1000000 * 1
- 使用子查詢1:50萬* 1 * 1
然後,就是子查詢比join快?
有沒有一個很好的教程,學習如何理解EXPLAIN
/EXPLAIN QUERY PLAN
結果?
爲什麼說SCAN TABLE隊列是〜1000000和〜500000,當那個表有76行時?
這裏是一個鏈接(** HTTPS://www.sqlite.org /eqp.html**)爲官方文檔**解釋查詢計劃**。它解釋了使用解釋查詢計劃所需要知道的一切 –