Mysql
 sql >> Database >  >> RDS >> Mysql

JOINS vs. dichiarazioni while

Se gli indici vengono utilizzati correttamente, è quasi sempre più efficiente per utilizzare un join. L'enfasi viene aggiunta perché la migliore efficienza non sempre equivale a prestazioni migliori.

Tuttavia, non esiste una risposta valida per tutti; dovresti analizzare una query usando EXPLAIN per garantire che gli indici vengano effettivamente utilizzati, che non vi sia un uso non necessario delle tabelle temporanee, ecc. In alcuni casi , le condizioni cospirano per creare una query che proprio non può utilizzare gli indici. In questi casi, potrebbe sii più veloce nel separare le query in pezzi nel modo che hai indicato.

Se incontrassi un codice del genere in un progetto esistente, lo metterei in discussione:controllare la query, pensare a diversi modi per eseguire la query, assicurarsi che queste cose siano state considerate, costruire un caso scientifico supportato da fatti a favore o contro la pratica . Assicurati che gli sviluppatori originali abbiano svolto la loro due diligence, poiché il mancato utilizzo di un JOIN indica superficialmente un database scadente o un design delle query scadente. Alla fine, tuttavia, i risultati parlano a voce alta e se tutte le ottimizzazioni e le correzioni si traducono ancora in un join più lento rispetto a quello fornito dall'utilizzo dei frammenti di query, prevale la soluzione più rapida. Benchmark e agire sui risultati del benchmark; non vi è alcun caso nella progettazione del software in cui dovresti barattare prestazioni scarse con l'adesione a regole arbitrarie su ciò che dovresti o non dovresti fare. Il metodo con le migliori prestazioni è il metodo migliore.