我想知道哪种方式更快
SELECT Id FROM T1
INTERSECT
SELECT Id FROM T2
或
SELECT T1.Id
FROM T1
INNER JOIN T2 ON T1.Id=T2.Id
答案 0 :(得分:1)
目前,SQLite通过将两个查询的结果复制到两个临时排序表中来实现INTERSECT
,然后在第二个表中查找第一个表的每个Id
值。
INNER JOIN
实现为嵌套循环连接,即在另一个表中查找一个表的每个Id
值。 (SQLite选择另一个表作为具有Id
索引的表;如果两个表都没有这样的索引,则会创建一个临时索引。)
所以实际差异是INTERSECT
总是创建临时表,而JOIN
可以直接在实际表上工作。
(如果T1
和T2
是复杂的子查询,JOIN
也需要临时表,并且没有区别。)