どっちが早いか気になる
SELECT Id FROM T1
INTERSECT
SELECT Id FROM T2
また
SELECT T1.Id
FROM T1
INNER JOIN T2 ON T1.Id=T2.Id
どっちが早いか気になる
SELECT Id FROM T1
INTERSECT
SELECT Id FROM T2
また
SELECT T1.Id
FROM T1
INNER JOIN T2 ON T1.Id=T2.Id
現時点では、SQLiteINTERSECT
は 2 つのクエリの結果を 2 つの一時的な並べ替えられたテーブルにコピーしId
、2 番目のテーブルで最初のテーブルの各値を検索することによって実装します。
AnINNER JOIN
はネストされたループ結合として実装されます。つまり、一方のテーブルの各Id
値が他方のテーブルで検索されます。(SQLite は、インデックスが にあるテーブルとして他のテーブルを選択しId
ます。どちらのテーブルにもそのようなインデックスがない場合、一時的なインデックスが作成されます。)
したがって、実質的な違いは、INTERSECT
常に一時テーブルを作成する一方JOIN
で、実際のテーブルで直接作業できることです。(T1
とT2
が複雑なサブクエリの場合、JOIN
一時テーブルも必要になり、違いはありません。)