3

どっちが早いか気になる

SELECT Id FROM T1
INTERSECT
SELECT Id FROM T2

また

SELECT T1.Id
    FROM T1
    INNER JOIN T2 ON T1.Id=T2.Id
4

1 に答える 1

1

現時点では、SQLiteINTERSECTは 2 つのクエリの結果を 2 つの一時的な並べ替えられたテーブルにコピーしId、2 番目のテーブルで最初のテーブルの各値を検索することによって実装します。

AnINNER JOINはネストされたループ結合として実装されます。つまり、一方のテーブルの各Id値が他方のテーブルで検索されます。(SQLite は、インデックスが にあるテーブルとして他のテーブルを選択しIdます。どちらのテーブルにもそのようなインデックスがない場合、一時的なインデックスが作成されます。)

したがって、実質的な違いは、INTERSECT常に一時テーブルを作成する一方JOINで、実際のテーブルで直接作業できることです。(T1T2が複雑なサブクエリの場合、JOIN一時テーブルも必要になり、違いはありません。)

于 2013-07-13T20:27:11.947 に答える