我在数据库中进行处理,遍历整个表。在某些时候,我需要检查VARCHAR
是否匹配列中的任何值。
我想知道这样做的快捷方式是什么。每次做SQL比较吗?将表值检索到VARCHAR array
?另一个解决方案?
表中的迭代超过数百万,因此比较将进行数百万次。在匹配表中,有几百个值。
那么,最好的方法是什么?
答案 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)
将小表中的值转换为数组并检查它们不能与索引搜索竞争。