¿Beneficio de rendimiento cuando la consulta SQL es limitada frente a llamar a toda la fila?

StackOverflow https://stackoverflow.com/questions/430605

  •  08-07-2019
  •  | 
  •  

Pregunta

¿Qué beneficio de rendimiento hay al seleccionar solo el campo requerido en la consulta en lugar de consultar toda la fila? Por ejemplo, si tengo una fila de 10 campos pero solo necesito 5 campos en la pantalla, ¿vale la pena consultar solo esos 5? ¿Cuál es el beneficio de rendimiento con esta limitación frente al riesgo de tener que regresar y agregar campos en la consulta SQL más tarde si es necesario?

¿Fue útil?

Solución

No es solo el aspecto de datos adicionales lo que debe tener en cuenta. Seleccionar todas las columnas negará la utilidad de cubrir índices, ya que se requerirá una búsqueda de marcadores en el índice agrupado (o tabla).

Otros consejos

Depende de cuántas filas estén seleccionadas y cuánta memoria consuman esos campos adicionales. Puede funcionar mucho más lento si hay varios campos de texto / blobs presentes, por ejemplo, o si se seleccionan muchas filas.

¿Cómo es un riesgo agregar campos después? modificar consultas para adaptarse a los requisitos cambiantes es una parte natural del proceso de desarrollo.

El único beneficio que conozco de nombrar explícitamente sus columnas en su declaración select es que si una columna que está usando su código se renombra, su declaración select fallará antes de su código. Aún mejor si su declaración select está dentro de un proceso, su proceso y el script DB no se compilarían. Esto es muy útil si está utilizando herramientas como la edición VS DB para compilar / verificar scripts DB. De lo contrario, la diferencia de rendimiento sería insignificante.

El número de campos recuperados es un efecto de segundo orden en el rendimiento en relación con la gran sobrecarga de la solicitud SQL en sí misma: salir del proceso, a través de la red a otro host y posiblemente al disco en ese host lleva muchos más ciclos que palear unos pocos bytes adicionales de datos.

Obviamente, si los campos adicionales incluyen un blob de megabytes, la ecuación está sesgada. Pero mi experiencia es que la sobrecarga de la transacción es del mismo orden, o mayor, que los datos reales recuperados. Recuerdo vagamente desde hace muchos años que un "vacío" La solicitud de NOP TNS tiene aproximadamente 100 bytes en el cable.

Si el servidor SQL no es la misma máquina desde la que realiza la consulta, la selección de las columnas adicionales transfiere más datos a través de la red (lo que puede ser un cuello de botella), sin olvidar que tiene que leer más datos del disco , asigne más memoria para guardar los resultados.

No hay una sola cosa que pueda causar un problema en sí misma, pero sumar cosas y todas juntas causan problemas de rendimiento. Cada poquito ayuda cuando tienes muchas consultas o datos.

Supongo que el riesgo sería que luego tenga que agregar los campos a la consulta, lo que posiblemente signifique cambiar el código, pero de todos modos, generalmente tendrá que agregar más código para manejar campos adicionales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top