2011-11-30 14 views
8

Supongamos que tengo una consulta MySQL con dos condiciones:orden de ejecución condición en MySQL

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

La primera condición es, obviamente, va a ser mucho más barato que el segundo, así que me gustaría estar seguro de que se ejecuta primero, lo que limita el conjunto de filas que se compararán con la cláusula LIKE. ¿Las condiciones de consulta de MySQL se ejecutan en el orden en que aparecen en la lista o, de lo contrario, existe una forma de especificar el orden?

Respuesta

6

MySQL tiene un optimizador interno de consultas que se encarga de tales cosas en la mayoría de los casos. Entonces, típicamente, no necesita preocuparse por eso.

Pero, por supuesto, el optimizador de consultas no es infalible. Entonces ...

Lamento hacértelo hacer esto, pero querrás familiarizarte con EXPLAIN si sospechas que una consulta puede estar ejecutándose de forma menos eficiente de lo que debería.

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

+0

No es el diagnóstico de una consulta específica, simplemente dándole vueltas a la posibilidad. Gracias por el consejo de EXPLAIN, tendré que leerlo. – wyatt

6

El optimizador evaluará las condiciones en las que en el orden que estime conveniente.

SQL es declarative: le dice al optimizador lo que quiere, no cómo hacerlo.

En un lenguaje procedural/imperative (.net, Java, php, etc.), entonces diga cómo elegiría y qué condición se evalúa primero.

Nota: "izquierda a derecha" sí se aplica en ciertas expresiones como (a+b)*c como era de esperar

+1

Exactamente, tampoco puede usar el orden de la condición de ejecución de MySQL como 'o condición', en los lenguajes de procedimiento, puede usar 'if (a == 1 || b == 3) ..', una vez 'a == 1', 'b == 3' nunca se ejecutará. –