【发布时间】:2010-11-27 18:39:02
【问题描述】:
我有两个表之间的 1:1 关系。我想查找表 A 中所有在表 B 中没有对应行的行。我使用此查询:
SELECT id
FROM tableA
WHERE id NOT IN (SELECT id
FROM tableB)
ORDER BY id desc
id 是两个表中的主键。除了主键索引,我在 tableA(id desc) 上也有一个索引。
使用 H2(Java 嵌入式数据库),这会导致对 tableB 进行全表扫描。我想避免全表扫描。
如何重写此查询以快速运行?我应该使用什么索引?
【问题讨论】:
-
每次写“WHERE col [NOT] IN (SELECT col FROM othertable)”时,最好使用 [NOT] EXISTS 进行重构。
标签: sql optimization h2