PDO SQLite中的`INTERSECT` vs`INNER JOIN`

时间:2013-07-13 18:25:19

标签: performance sqlite

我想知道哪种方式更快

SELECT Id FROM T1
INTERSECT
SELECT Id FROM T2

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

1 个答案:

答案 0 :(得分:1)

目前,SQLite通过将两个查询的结果复制到两个临时排序表中来实现INTERSECT,然后在第二个表中查找第一个表的每个Id值。

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

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

相关问题