2011-12-14 53 views
0

我在遍历整个表的数据库中有一个处理。在某些时候,我需要检查一个VARCHAR是否与列中的任何值匹配。将VARCHAR与另一个VARCHAR进行比较的快速方法

我想知道做这件事的快速方法是什么。每次都进行SQL比较?检索表值到VARCHAR array?另外一个解

表中的迭代超过了数百万次,所以比较将进行百万次。在比赛表中,有几百个值。

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

+1

我会认为这将是一个标准的连接?可以选择添加索引以获得更好的性能。 –

+0

您需要检查VARCHAR是否匹配表中的任何值或*列*中的任何值? –

+0

@Catcall在一列中。 –

回答

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) 

将来自小表中的值到数组和检查存在不能与索引搜索竞争。

相关问题