2011-12-14 54 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) 

將來自小表中的值到數組和檢查存在不能與索引搜索競爭。

相關問題