2011-11-30 13 views
8

Supponiamo che io ho una query MySQL con due condizioni:Ordine di condizione di esecuzione in MySQL

SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%'; 

La prima condizione è, ovviamente, sarà molto più economico rispetto al secondo, quindi mi piacerebbe essere sicuri che viene eseguito per primo, limitando il pool di righe che verrà confrontato con la clausola LIKE. Le condizioni della query MySQL vengono eseguite nell'ordine in cui sono elencate o, in caso contrario, esiste un modo per specificare l'ordine?

risposta

6

MySQL ha un ottimizzatore di query interno che si occupa di tali aspetti nella maggior parte dei casi. Quindi, in genere, non devi preoccuparti di questo.

Ma, ovviamente, Query Optimizer non è infallibile. Quindi ...

Mi spiace farlo, ma è necessario acquisire familiarità con EXPLAIN se si sospetta che una query possa essere eseguita in modo meno efficiente di quanto dovrebbe.

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

Non diagnosi di una query specifica, proprio rimuginando la possibilità. Grazie per il suggerimento di SPIEGA, dovrò leggere su di esso. – wyatt

6

L'ottimizzatore valuterà le condizioni in cui nell'ordine meglio ritiene opportuno.

SQL è declarative: dite al ottimizzatore quello desiderata, non come per farlo.

In un linguaggio procedural/imperative (.net, Java, php, ecc.), Quindi si dice come e scegliere quale condizione viene valutata per prima.

Nota: "da sinistra a destra" non si applicano in certe espressioni come (a+b)*c come ci si aspetterebbe

+1

Esattamente, inoltre, non è possibile utilizzare l'ordine dell'esecuzione della condizione MySQL come 'o condizione', nei linguaggi procedurali, è possibile utilizzare 'if (a == 1 || b == 3) ..', una volta 'a == 1', 'b == 3' non sarà mai eseguito. –