2011-12-14 2 views
0

J'ai un traitement dans la base de données qui parcourt une table entière. À un certain point, je dois vérifier si un VARCHAR correspond à une valeur dans une colonne.Un moyen rapide de comparer un VARCHAR à un autre

Je veux savoir quelle est la manière rapide de faire cela. Est-ce que la comparaison SQL est chaque fois? Récupérer les valeurs de la table à un VARCHAR array? Une autre solution?

L'itération dans la table est supérieure à des millions, donc la comparaison sera faite des millions de fois. Dans la table de match, il y a quelques centaines de valeurs.

Alors, quelle est la meilleure approche pour cela?

+1

Je pense que ce serait une jointure standard? Avec l'option d'ajouter un index pour de meilleures performances. –

+0

Vous devez vérifier si un VARCHAR correspond à une valeur dans une table ou à une valeur dans une * colonne *? –

+0

@Catcall Dans une colonne. –

Répondre

2

Avoir un index sur la colonne varchar dans la petite table. Ensuite, la recherche sera aussi rapide que possible. Un index btree simple (par défaut) est bon pour l'opérateur d'égalité.

CREATE INDEX smalltbl_lookup ON smalltbl(lookup); 

Si vous ne regardez certaines valeurs, ce sera le moyen le plus rapide:

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup) 

résultant dans une recherche d'index. Si vous regardez toutes les valeurs (ne sonne pas comme vous le faites), un LEFT JOIN est plus rapide:

SELECT * 
FROM bigtbl b 
LEFT JOIN smalltbl s USING (lookup) 

Transformer les valeurs de la petite table dans un tableau et la vérification, il ne peut rivaliser avec une recherche d'index.

Questions connexes