2010-03-24 16 views
10

¿Alguien sabe si la eliminación de los nombres de campo de una consulta INSERT resulta en algunas mejoras de rendimiento?SQL INSERT performance ¿omite los nombres de campo?

quiero decir es esto:

INSERT INTO table1 VALUES (value1, value2, ...) 

más rápido para DB que se lleva a cabo en lugar de hacer esto:

INSERT INTO table1 (field1, field2, ...) VALUES (value1, value2, ...) 

?

Sé que probablemente sea una diferencia de rendimiento sin sentido, pero solo para saber.

Normalmente estoy usando MySQL y PostgreSQL como DB.

Respuesta

12

No, de hecho lo contrario! Al menos para Microsoft SQL Server: no especificó de qué base de datos está hablando .....

Si no especifica los campos, ya sea SELECCIONAR o INSERTAR, la consulta de SQL Server el procesador debe primero inspeccionar los catálogos del sistema para averiguar qué campos están realmente disponibles.

Así que siempre recomendaría enumerar explícitamente los campos que desea, tanto en SELECT como en INSERT.

+2

1 Estoy de acuerdo en principio, pero se preguntó - ¿no es así tiene que consultar el esquema en el último caso para las definiciones de columna/valores predeterminados de todos modos? – Andy

+0

@Andy: quizás sea así, pero solo para un subconjunto de los campos, los que especifique. Para INSERTAR, la diferencia puede ser extremadamente marginal, pero para SELECTs, definitivamente vale la pena especificar los campos explícitamente, también por razones de velocidad –

+1

+1 Y también la legibilidad sería realmente mala para una consulta insertada con 10 columnas, por ejemplo, si no especifica los nombres de las columnas. –

1

No, no es más rápido. La base de datos tiene que verificar qué campos están en la tabla y coincidir con los valores de todos modos.

Siempre debe especificar los campos en la consulta para que el código sea más robusto. Si alguien cambia el orden de los campos en la tabla, deja de funcionar (o peor escribe los datos en el campo incorrecto) si no ha especificado los campos.

1

No conozco ninguna mejora en el rendimiento al omitir los nombres de los campos, pero desaconsejaré cualquier otra cosa que no sea la prueba/inserciones de una sola vez.

legibilidad sufrirá (usted tiene que comprobar la mesa para ver lo que se está insertado dónde) y su código se romperá si el esquema de tabla se cambia

Cuestiones relacionadas