2013-07-13 60 views
3

我不知道哪條路是更快`INTERSECT` VS`INNER JOIN`在PDO的SQLite

SELECT Id FROM T1 
INTERSECT 
SELECT Id FROM T2 

SELECT T1.Id 
    FROM T1 
    INNER JOIN T2 ON T1.Id=T2.Id 
+0

['當用於INNER JOIN'可以用'INTERSECT'模擬'DISTINCT'](HTTP:/ /blog.sqlauthority.com/2008/08/03/sql-server-2005-difference-between-intersect-and-inner-join-intersect-vs-inner-join/)。因此,我認爲'INNER JOIN'會更快。 – hjpotter92

回答

1

目前,SQLite的通過複製兩個查詢的結果實現了INTERSECT分成兩個臨時排序表,然後查找第二個表中第一個表的每個Id值。

INNER JOIN被實現爲嵌套循環連接,即在另一個表中查找每個表的Id值。 (SQLite的選擇另一個表作爲一個與Id的索引;如果既不表具有這樣的指數,它創建一個臨時索引。)

所以之實踐的區別在於INTERSECT總是創建的臨時表,而JOIN可以工作直接在實際的表上。 (如果T1T2是複雜的子查詢,JOIN還將需要臨時表,並且將有沒有差別。)