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通过将两次查询的结果复制到两个临时排序表中,然后Id在第二个表中查找第一个表的每个值来实现。

AnINNER JOIN被实现为嵌套循环连接,即Id在另一个表中查找一个表的每个值。(SQLite 选择另一个表作为索引 on Id;如果两个表都没有这样的索引,它会创建一个临时索引。)

所以实际的区别是INTERSECT总是创建临时表,而JOIN可以直接在实际表上工作。(如果T1T2是复杂的子查询,JOIN也需要临时表,没有区别。)

于 2013-07-13T20:27:11.947 回答