2011-01-03 18 views
11

Al seleccionar columnas de una tabla MySQL, ¿se ve afectado el rendimiento por el orden en que selecciona las columnas en comparación con su orden en la tabla (sin considerar los índices que pueden cubrir las columnas)?¿Importa el orden de las columnas en una consulta?

Por ejemplo, tiene una tabla con filas uid, nombre, bday, y tiene la siguiente consulta.

SELECT uid, name, bday FROM table 

¿MySQL ve la siguiente consulta de forma diferente y por lo tanto causa algún tipo de golpe de rendimiento?

SELECT uid, bday, name FROM table 

Respuesta

7

En realidad, el pedido no importa, por lo que puede pedirlos como desee.

corregir: Supongo que un poco más de fondo es útil: hasta donde yo sé, el proceso de optimización de cualquier consulta ocurre antes de determinar exactamente qué subconjunto de los datos de la fila se está extrayendo. De modo que el optimizador de consultas lo descompone en la primera tabla que se debe mirar, se une para realizar, los índices para usar, los agregados para aplicar, etc., y luego recupera ese conjunto de datos. El orden de las columnas ocurre entre la extracción de datos y la formación del conjunto de resultados, por lo que los datos realmente "llegan" tal como lo ordena la base de datos, y luego se reordenan a medida que se devuelven a su aplicación.

2

En la práctica, sospecho que podría.

Con un optimizador de consultas decente: no debería.

Solo puede medir sus casos midiendo. Y las medidas probablemente cambien a medida que la distribución de datos cambie en la base de datos.

con respecto

Wazzy

0

el orden de los atributos seleccionados es despreciable. Los motores de almacenamiento subyacentes seguramente ordenan sus ubicaciones de atributos, pero no necesariamente tendrías una manera de saber el orden específico (renombrar, modificar tablas, filas versus tiendas de columnas) en la mayoría de los casos puede ser independiente de la descripción de la tabla que es solo metadatos de todas formas. El orden de presentación en el conjunto de resultados sería insignificante en términos de cualquier sobrecarga mensurable.

Cuestiones relacionadas