Hash Join

mercoledì 7 marzo 2007 alle 07:44 | Pubblicato su Performance Tuning | Lascia un commento

Ho avuto modo di verificare la “superiorità” della tecnica Hash Join sulla tecnica Nested Loop. Ieri su Oracle 9.2.0.4 ho lanciato una query come questa:

select count(*) from A, B where
A.jc0lumn=B.jcolumn and
B.selectcolumn=x

La tabelle A ha un milione di record, la tabella B venti milioni di record. Il campo  B.selectcolumn  è poco selettivo, ma indicizzato. Lavorando con ottimizzatore RULE il piano di esecuzione fa una full table scan sulla tabella A , fa un join con la tecnica Nested Loops con la tabella B accedendo a tale tabella tramite l’indice sulla tabella B. Cioè, Oracle scandisce tutta la tabella A, per ogni record verifica la condizione di join facendo un accesso indicizzato sulla tabella B.

Con una query così non c’è molto da fare, il problema è che lanciandola e monitorando gli eventi di wait si osserva che la sessione sta in attesa sull’evento “file sequential read”. La cosa mi è parsa strana, perchè solitamente Oracle per un full table scan produce eventi di attesa “file scattered read”, ma pensando all’algoritmo Nested Loop ho capito che in effetti è logico che acceda a blocchi singoli, deve fare una elaborazione per ogni record, cioè la verifica della condizione di loop.

Aggiungendo un HINT per forzare l’utilizzo della tecnica Hash Join l’evento di attesa diventa “file scattered read”. Mentre la prima query dopo 10 minuti non aveva ancora finito, con l’hint ci metteva non più di un paio di minuti.

Lascia un commento »

RSS feed for comments on this post. TrackBack URI

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: