表 A (ID, NAME),表 B (ID, NAME, SCORE),求兩表 ID 與 NAME 完全相符的列。
SELECT id, name FROM a
INTERSECT
SELECT id, name FROM b;
SELECT id, name FROM a
WHERE (id, name) IN (SELECT id, name FROM b);
WHERE id IN (...))| 指標 | INTERSECT | IN 子查詢 |
|---|---|---|
| 執行時間 | 1.8 秒 | 1.2 秒 |
| 記憶體用量 | 45 MB | 38 MB |
| 去重語意 | 自動 DISTINCT | 保留重複 |
| 適用性 | 全欄位比對、需去重 | 部分欄位、保留重複、可加索引提示 |
CREATE INDEX idx_a_id_name ON a(id, name);SELECT /*+ LEADING(b a) */ ...EXISTS 替代 IN:
SELECT * FROM a
WHERE EXISTS (SELECT 1 FROM b WHERE b.id=a.id AND b.name=a.name);
APPROX_COUNT_DISTINCT 快速估算交集大小MINUS (Oracle) / EXCEPT (ANSI):A 有 B 無的列UNION:合併去重;UNION ALL:合併不去重 (效能最佳)