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在一列中。 –