2012-05-09 14 views
5

Me pregunto, ¿cuál es el más rápido (o más ligero para la base de datos manejar)Que es más rápido: "SELECCIONAR * FROM tabla" o "SELECCIONAR x, y, q FROM tabla" (de una tabla con 4 campos)

Digamos, la tabla db tiene 4 campos: x, y, z, q

sólo necesito 3: x, y, q

Qué manera es más rápido/más fácil para la base de datos para llevar a cabo (usando PHP) .. "SELECCIONAR * FROM tabla" o "SELECCIONAR x, y, q FROM tabla"?

¿Se aplicaría lo mismo si la tabla tiene 5 o más campos mientras que solo necesito seleccionar 3?

+0

Piensa por la lógica más básica. Tienes una bolsa con diferentes tipos de bolas. Hay personas que quieren jugar baloncesto y voleibol. Puedes sacar el cesto y el voleibol, y dejar el resto en la bolsa. O, como alternativa, puede vaciar la bolsa entera, recuperar el cesto y el voleibol para repartirlos, y dejar el resto acostado. ¿Cuál sería más fácil? – TheDeadLike

Respuesta

10

SELECT x,y,z FROM table es más rápido porque MySQL no tendrá que buscar qué columnas hay en su tabla antes de ejecutar la consulta.

+4

Y si esas columnas están indexadas, ni siquiera necesitará leer de la tabla en sí ... – eggyal

+0

Ok. En mi cabeza, parecía más fácil para mysql simplemente seleccionarlo todo, en lugar de ser específico (y obtener mysql para buscar/ordenar esos campos) – mowgli

+2

Todavía tendrá que buscar las columnas para verificar que x, y, z son columnas válidas para esa tabla. –

3

En la mayoría de las bases de datos, * es más lento que la especificación de los campos.

También es una buena práctica de programación colocar todas las columnas, aunque sean muchas.

+0

¿Por qué es una buena práctica? – mowgli

+3

@mowgli Es una buena práctica por un par de razones. 1) Identifica mejor qué datos está utilizando en realidad a partir de los resultados de su consulta, 2) Como '*' recuperará los datos de todas las columnas, si alguna vez en el futuro alguien agrega 200 columnas adicionales a su tabla, de repente lo hará tiene que lidiar con 200 veces más datos transferidos que ** afectarán ** a ** su ** rendimiento, incluso si su trabajo no tiene nada que ver con su consulta. Básicamente es el principio de menos acceso o privilegio mínimo (http://en.wikipedia.org/wiki/Principle_of_least_privilege) –

3

SELECT x,y,q FROM table es siempre más rápido que select * ya que no están leyendo todos los campos, pero mencionar SELECT x,y,q,z FROM tableselect * y tendría efecto mismo rendimiento sabio.

Cuestiones relacionadas