PDA

View Full Version : [MySQL] Cosa fa la clausola straight_join?


Helldron
23-12-2010, 09:38
Ciao a tutti,
sto ottimizzando delle query SQL e in un esempio ho visto che l'uso degli indici, usati in modo opportuno si intende, può non bastare per azzerare i tempi di risposta di una query in caso di migliaia di record. Tuttavia quando viene usata la clausola "straight_join" subito dopo il comando "select" in alcuni casi ha fatto la differenza.

Cosa fa esattamente?? Io conosco il left-right-full join ma questo mi suona nuovo!!

Grazie :D

oNaSsIs
23-12-2010, 10:03
La clausola STRAIGHT_JOIN serve per forzare le join tra le tabelle nell'ordine che hai specificato nello statement FROM. Senza questa clausola è l'ottimizzatore a deciderne l'ordine, e non sempre sceglie la soluzione migliore, per motivi di complessità. Ora non ho tempo, ma se ti interessa qualche informazione aggiuntiva non hai che da chiedere. ;)

Helldron
23-12-2010, 10:44
La clausola STRAIGHT_JOIN serve per forzare le join tra le tabelle nell'ordine che hai specificato nello statement FROM. Senza questa clausola è l'ottimizzatore a deciderne l'ordine, e non sempre sceglie la soluzione migliore, per motivi di complessità. Ora non ho tempo, ma se ti interessa qualche informazione aggiuntiva non hai che da chiedere. ;)Nell'esempio che ho visto in 4 tabelle, usando 3 indici + la clausa straight join, i tempi di risposta si sono azzerati mentre erano di circa 0.20-0.30 sec!!

Sto usando un approccio simile al mio DB, dagli explain sembra che le righe selezionate si riducano molto (almeno nella tabella più popolata) però poi miglioro la risposta da 0.34 sec a 0.24 circa che più aumentano le tuple e meglio è, ma non non mi azzera di certo i tempi di risposta.

Qualche consiglio sull'uso degli INDICI e di queste clausole di JOIN??