どっちが早いか気になる
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一時テーブルも必要になり、違いはありません。)