Les performances de SQL comparaison à l'aide de substring vs comme avec des caractères génériques

Je suis en train de travailler sur une condition de jointure entre 2 tables où l'une des colonnes de correspondance est une concaténation de valeurs. J'ai besoin de rejoindre la columnA de tableA pour les 2 premiers caractères de colonneb de la tableB.

J'ai développé 2 différents états de gérer cela et j'ai essayé d'analyser la performance de chaque méthode.

Méthode 1:

ON tB.columnB   like  tA.columnA || '%'

Méthode 2:

ON substr(tB.columnB,1,2) = tA.columnA

Le plan d'exécution de requête a beaucoup moins d'étapes à l'aide de la Méthode 1 par rapport à la Méthode 2, cependant, il ressemble à la Méthode 2 s'exécute beaucoup plus rapidement. Aussi, le plan d'exécution montre un recommandé indice pour la Méthode 2 qui pourrait améliorer ses performances.

Je suis en cours d'exécution sur une IBM iSeries, serait intéressé par les réponses dans un sens général, pour en savoir plus sur l'optimisation des requêtes sql.

T-il un sens que la Méthode 2 ne s'exécutent plus rapidement?

Ce DONC, la question est similaire, mais il semble que personne n'a fourni aucune réponse concrète à la différence de performances de ces approches: T-SQL comparaison de la vitesse entre la GAUCHE() vs COMME opérateur.

PS: la conception de La table qui nécessite ce type de jointure n'est pas quelque chose que je peux avoir changé à ce moment. Je me rends compte avoir le champs séparés qui détiennent les différents types de données serait préférable.

INTERNE ou EXTERNE de la REJOINDRE?
C'est pour une jointure interne. Serait-type de jointure faire une différence?
Eh bien, c'est probablement perdre un match à deviner ce qui se passe dans un optimiseur de requête. Mais oui, dans ce cas, si c'est une JOINTURE INTERNE de la Méthode 1 requiert que toutes tA pour être lu en méthode 2 seulement besoin de lire la tuberculose. Selon le nombre de lignes, qui pourraient être importants et affecter l'exécution du plan.

OriginalL'auteur Swoop | 2011-09-15