0
我在遍历整个表的数据库中有一个处理。在某些时候,我需要检查一个VARCHAR
是否与列中的任何值匹配。将VARCHAR与另一个VARCHAR进行比较的快速方法
我想知道做这件事的快速方法是什么。每次都进行SQL比较?检索表值到VARCHAR array
?另外一个解
表中的迭代超过了数百万次,所以比较将进行百万次。在比赛表中,有几百个值。
那么,最好的方法是什么?
我在遍历整个表的数据库中有一个处理。在某些时候,我需要检查一个VARCHAR
是否与列中的任何值匹配。将VARCHAR与另一个VARCHAR进行比较的快速方法
我想知道做这件事的快速方法是什么。每次都进行SQL比较?检索表值到VARCHAR array
?另外一个解
表中的迭代超过了数百万次,所以比较将进行百万次。在比赛表中,有几百个值。
那么,最好的方法是什么?
在小表中有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)
将来自小表中的值到数组和检查存在不能与索引搜索竞争。
我会认为这将是一个标准的连接?可以选择添加索引以获得更好的性能。 –
您需要检查VARCHAR是否匹配表中的任何值或*列*中的任何值? –
@Catcall在一列中。 –