Sto lavorando ad una condizione di join tra 2 tabelle in cui una delle colonne per abbinare su è un concatenazione di valori. Devo unire la colonna A dalla tabellaA ai primi 2 caratteri della colonna B dalla tabellaB.prestazioni di confronto SQL tramite stringa vs come con jolly
Ho sviluppato 2 istruzioni diverse per gestirlo e ho provato ad analizzare le prestazioni di ciascun metodo.
Metodo 1:
ON tB.columnB like tA.columnA || '%'
Metodo 2:
ON substr(tB.columnB,1,2) = tA.columnA
Il piano di esecuzione di query ha molto meno passaggi utilizzando Metodo 1 rispetto al metodo 2, tuttavia, sembra che il metodo 2 esegue molto Più veloce. Inoltre, il piano di esecuzione mostra un indice consigliato per il Metodo 2 che potrebbe migliorare le sue prestazioni.
Lo sto eseguendo su un IBM iSeries, anche se sarebbe interessato alle risposte in senso generale per saperne di più sull'ottimizzazione delle query SQL.
Ha senso che il metodo 2 sarebbe eseguire più velocemente?
Questa domanda SO è simile, ma sembra che nessuno abbia fornito risposte concrete alla differenza di prestazioni di questi approcci: T-SQL speed comparison between LEFT() vs. LIKE operator.
PS: il design della tabella che richiede questo tipo di join non è qualcosa che posso essere modificato in questo momento. Mi rendo conto che avere i campi separati che contengono diversi tipi di dati sarebbe preferibile.
INNER o OUTER JOIN? –
Si tratta di un join interno. Unire il tipo può fare la differenza? – Swoop
Beh, probabilmente è una partita persa per indovinare cosa sta succedendo in un Query Optimizer. Ma sì, in questo caso, se si tratta di un metodo JOIN INNER 1, è necessario leggere tutti i tA mentre il metodo 2 deve solo leggere tB. A seconda del numero di righe, ciò potrebbe essere significativo e potrebbe influire sul piano di esecuzione. –