【发布时间】:2012-10-31 15:01:57
【问题描述】:
我查询成功了:
SELECT * FROM tableA
WHERE NOT (column1 IN
(SELECT column1 FROM tableB) AND columnDate='9999-12-31');
tableA 有大约 35000k(3500 万)条记录,tableB 有 5k(5000)条记录。
我在不到 5 分钟的时间内从 tableA 检索到除 tableB 之外的所有记录。
问题是当我尝试(对于另一个具有相同记录量的示例)使用 3 列(键)来实现相同的结果时:
SELECT * FROM tableA
WHERE NOT (column1 || column2 || column3 IN
(SELECT column1 || column2 || column3 FROM tableB) AND columnDate='9999-12-31');
我在 1 小时 40 分钟内从 tableA 检索除 tableB 之外的所有记录......!
我可以更有效地查询它吗?
【问题讨论】:
-
是一次性查询吗?你能在 tableB 上的
column1 || column2 || column3上创建一个索引吗? -
我为三列(A、B、C)创建了一个索引。结果没有区别。然后我尝试使用管道创建索引但检索到语法错误...
-
不,在 a、b 和 c 上创建单独的索引不会削减它。您需要在 а || 上创建一个基于函数的索引。乙 || C。试试
CREATE INDEX idx ON tableA (a || b || c); -
我认为发帖者对 || 并不真正感兴趣乙 || c,但 (a, b, c) 是否在第二个表中。
-
Podiluska,我正在查询一个 greenplum 数据库
标签: sql