sql >> Base de Datos >  >> RDS >> Sqlserver

Sugerencias para reducir la complejidad de SQL Server

Las consultas SQL complejas son excelentes para hacer que las búsquedas en bases de datos sean muy específicas y flexibles, pero también pueden ser difíciles de entender y casi imposibles de depurar, y es mejor que se olvide de reutilizarlas.

Cuando las consultas van más allá de los comandos estándar SELECT y WHERE, es posible que el rendimiento de SQL Server comience a verse afectado porque los optimizadores de consultas tienen problemas para procesar consultas largas y complejas.

Si observa que sus consultas SQL usan un número excesivo de uniones y subconsultas complejas, anidan consultas en cláusulas WHERE y dependen de muchas cláusulas AND y OR, probablemente sea un buen momento para dar un paso atrás y buscar formas de minimizar parte de la complejidad.

Sugerencias para minimizar la complejidad de las consultas de SQL Server

Como mencionamos anteriormente, a los optimizadores de consultas de SQL Server no les gustan las consultas SQL complejas. Aquí hay cinco formas de hacer que sus consultas sean menos complejas para que puedan optimizarse para mejorar el rendimiento.

1. Elimine las cláusulas OR cuando sea posible

La forma más sencilla de hacer que las consultas sean menos complejas es eliminar las cláusulas OR siempre que sea posible. Debido a que OR es inclusivo, SQL Server tiene que procesar cada componente de la cláusula por separado, lo que realmente ralentiza las operaciones.

Cuando no es posible eliminar OR, la siguiente mejor opción es dividir las consultas largas y complejas en otras más pequeñas. Parece un poco contrario a la intuición que procesar más consultas es más rápido que procesar una sola, pero cuando se trata de OR, es mejor optar por varias consultas.

2. Búsquedas de cadenas de ajuste fino

SQL Server hace muchas cosas bien, pero las búsquedas de cadenas difusas no son una de ellas. Las búsquedas de cadenas comodín, especialmente en tablas grandes, son ineficientes y perjudiciales para el rendimiento.

Hay algunos ajustes que puede aplicar a las búsquedas de cadenas que ayudan a minimizar el impacto en el rendimiento.

  • Utilice una búsqueda de cadena inicial en lugar de una búsqueda con comodines (es decir, cambie "%For%" a "For%")
  • Aplique filtros como la fecha o la hora a la consulta para reducir el tamaño de los datos antes de ejecutar la búsqueda de cadenas.
  • Aplique indexación de texto completo para generar índices que permitan una búsqueda flexible de cadenas en columnas de texto

3. Tenga cuidado con las grandes operaciones de escritura

Las operaciones de escritura grandes provocan conflictos y generan una gran cantidad de archivos de registro. Si no se controlan, las grandes operaciones de escritura pueden bloquear los recursos de los usuarios y crear problemas de latencia, además de llenar los registros de transacciones o incluso el almacenamiento físico.

Debido a que no siempre puede evitar grandes operaciones de escritura, sea consciente de cuándo las ejecuta (cuanto menos ocupado esté el servidor, mejor) o reduzca la cantidad de filas modificadas por operación para minimizar el riesgo de contención.

4. Limpiar índices

Los índices son uno de los principales culpables cuando se trata de un bajo rendimiento, pero cuando intenta optimizar consultas SQL complejas, los índices requieren algunas consideraciones especiales.

SQL Server tiene varias herramientas que le permiten saber cuándo los índices que faltan afectan el rendimiento de las consultas. Pero antes de saltar y comenzar a agregar índices, debe determinar si el índice adicional mejorará la consulta lo suficiente como para que valga la pena el esfuerzo. Por ejemplo, si la consulta se ejecuta 1 millón de veces al día y el índice la mejora en un 25 por ciento, probablemente valga la pena. Si la consulta rara vez se usa, es posible que no tenga sentido.

Algunas otras cosas a considerar antes de comenzar a agregar índices son si los índices existentes se pueden ajustar para cubrir este caso de uso sin agregar uno nuevo y si este índice ya existe pero el optimizador lo ignora por alguna razón.

Otras formas en que los índices pueden afectar el rendimiento de las consultas son las tablas de indexación excesiva o insuficiente y las tablas que carecen de un índice agrupado o una clave principal. Resolver estos problemas ayudará con el rendimiento de consultas SQL complejas.

5. Mantener la cuenta regresiva de la mesa

Cada vez que agrega una tabla a una consulta, la consulta se vuelve más compleja. El exceso de tablas a menudo da como resultado planes de ejecución deficientes porque el optimizador de consultas no puede funcionar de manera eficiente.

Si observa que una consulta compleja tiene un rendimiento deficiente y tiene muchas tablas, esta puede ser una de esas ocasiones en las que dividir la consulta en consultas más pequeñas es la mejor opción porque aliviará parte de la carga del optimizador.

Las herramientas de ajuste de rendimiento pueden ayudar a minimizar la complejidad de SQL Server

Cuando las consultas complejas atascan el optimizador de consultas, a menudo termina con un plan de ejecución ineficiente y el rendimiento se ve afectado. Además de los consejos anteriores, las herramientas de ajuste del rendimiento son un recurso valioso para minimizar la complejidad de las consultas de SQL Server y optimizar el rendimiento.

A continuación se presentan algunas de las capacidades que debe buscar al investigar soluciones de ajuste de rendimiento.

Análisis del plan de ejecución de SQL Server

La herramienta de ajuste debe analizar su plan de ejecución y determinar qué debe cambiar para que SQL Server ejecute las operaciones de manera más eficiente.

Visualización del plan de ejecución de SQL Server

La herramienta de ajuste debe presentar el plan de ejecución de una manera que sea fácil de entender y le ayude a localizar las operaciones que están ralentizando la ejecución.

Optimización automática de SQL

La herramienta de ajuste debe analizar su SQL y luego reescribirlo automáticamente hasta que alcance la mejora máxima del tiempo de ejecución.

Comparación de sentencias de SQL originales y optimizadas

La herramienta de ajuste debe resaltar los cambios en la instrucción SQL para que pueda comparar las versiones original y optimizada antes de implementar los cambios.

Comparación de planes de ejecución de SQL Server

Las herramientas de ajuste deben proporcionar una comparación de los planes de ejecución originales y optimizados para que sepa qué cambió entre las versiones.

Prueba estadística

Su herramienta de ajuste debe proporcionar datos que muestren por qué el SQL optimizado se ejecuta más rápido que la instrucción SQL original.

Las consultas complejas de SQL Server pueden tener un impacto negativo en el rendimiento del sistema. Utilice estos consejos y una solución de ajuste de rendimiento de alta calidad para limpiar la complejidad y optimizar la eficiencia de sus consultas SQL.