快速方法将VARCHAR与另一个VARCHAR进行比较

时间:2011-12-14 02:19:23

标签: postgresql comparison plpgsql varchar

我在数据库中进行处理,遍历整个表。在某些时候,我需要检查VARCHAR是否匹配列中的任何值。

我想知道这样做的快捷方式是什么。每次做SQL比较吗?将表值检索到VARCHAR array?另一个解决方案?

表中的迭代超过数百万,因此比较将进行数百万次。在匹配表中,有几百个值。

那么,最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

在小表中的varchar列上有一个索引。然后查找将尽可能快。普通的btree索引(默认)适用于相等运算符。

CREATE INDEX smalltbl_lookup ON smalltbl(lookup);

如果您只查找某些值,这将是最快的方式:

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup)

导致索引搜索。如果你查找所有值(听起来不像你那样),LEFT JOIN会更快:

SELECT *
FROM bigtbl b
LEFT JOIN smalltbl s USING (lookup)

将小表中的值转换为数组并检查它们不能与索引搜索竞争。