miércoles, 6 de diciembre de 2023

Cual son los problemas de rendimiento de las consultas SQL

¿Qué problemas de rendimiento de las consultas SQL debe tener en cuenta?


Índice

1 Índices faltantes

2 Uniones ineficientes

3 Subconsultas subóptimas

4 Agregación excesiva

5 Tipos de datos incorrectos

6 Complejidad innecesaria

7 Esto es lo que hay que tener en cuenta


1 Índices faltantes

Una de las causas más comunes de las consultas SQL lentas es la falta de índices en las columnas que se utilizan en las cláusulas WHERE, JOIN, ORDER BY o GROUP BY. Los índices ayudan al motor de base de datos a buscar y ordenar las filas relevantes más rápido, lo que reduce la cantidad de E/S de disco y el tiempo de CPU. Sin embargo, la creación de demasiados índices también puede tener un impacto negativo en el rendimiento, ya que ocupan espacio y deben actualizarse cada vez que cambian los datos. Por lo tanto, solo debe crear índices en las columnas que se usan con frecuencia en las consultas y que tienen una alta selectividad (es decir, filtran un gran porcentaje de las filas).


2 Uniones ineficientes

Otra causa común del bajo rendimiento de las consultas SQL son las combinaciones ineficaces, que se producen cuando se combinan datos de varias tablas sin utilizar las condiciones de combinación o los tipos de combinación adecuados. Las uniones ineficaces pueden dar lugar a la transferencia o el procesamiento de datos innecesarios, lo que aumenta el uso de la memoria y la red. Para evitar combinaciones ineficaces, siempre debe usar la sintaxis de combinación explícita (por ejemplo, INNER JOIN, LEFT JOIN, etc.) en lugar de sintaxis de combinación implícita (por ejemplo, el uso de comas en la cláusula FROM)y especifique las condiciones de unión en la cláusula ON. También debe elegir el tipo de combinación adecuado en función de la relación entre las tablas y los datos que necesita. Por ejemplo, si solo necesita las filas que coinciden en ambas tablas, utilice INNER JOIN en lugar de OUTER JOIN.


3 Subconsultas subóptimas

Las subconsultas son consultas que están anidadas dentro de otra consulta y pueden ser útiles para realizar cálculos complejos o filtrar datos. Sin embargo, las subconsultas también pueden causar problemas de rendimiento si no se escriben o ejecutan de forma óptima. Por ejemplo, si usa una subconsulta en la cláusula SELECT, se ejecutará para cada fila devuelta por la consulta externa, lo que puede ser muy ineficaz. Para evitar subconsultas subóptimas, debe considerar la posibilidad de usar combinaciones, tablas derivadas o expresiones de tabla comunes en lugar de subconsultas cuando sea posible. También debe evitar el uso de subconsultas correlacionadas, que son subconsultas que hacen referencia a columnas de la consulta externa, ya que pueden impedir que Motor de base de datos utilice índices o paralelismo.


4 Agregación excesiva

La agregación es el proceso de agrupar y resumir datos utilizando funciones como SUM, COUNT, AVG, etc. La agregación puede ser útil para generar informes o información a partir de grandes conjuntos de datos, pero también puede causar problemas de rendimiento si se realiza de forma excesiva o innecesaria. Por ejemplo, si utiliza funciones de agregación en columnas que tienen cardinalidad baja (es decir, tienen pocos valores distintos), terminará con un pequeño número de grupos y una gran cantidad de datos para procesar. Para evitar una agregación excesiva, solo debe usar funciones de agregación en columnas que tengan una cardinalidad alta (es decir, tienen muchos valores distintos) y que sean relevantes para su consulta. También debe usar la cláusula HAVING para filtrar los grupos que no cumplen los criterios, en lugar de usar la cláusula WHERE para filtrar las filas antes de la agregación.


5 Tipos de datos incorrectos

Los tipos de datos de las columnas y variables de las consultas SQL también pueden afectar al rendimiento de las consultas, ya que determinan cuánto espacio y tiempo necesita el motor de base de datos para almacenar y procesar los datos. Los tipos de datos incorrectos pueden causar problemas de rendimiento, como conversión de datos, truncamiento de datos o ineficacia del índice. Para evitar tipos de datos incorrectos, debe elegir los tipos de datos que coincidan con la naturaleza y el tamaño de los datos, y que sean compatibles con los tipos de datos de las columnas o variables que compare o combine. También debe evitar el uso de tipos de datos genéricos o grandes, como VARCHAR(MÁXIMO) o NVARCHAR(MÁXIMO), a menos que realmente los necesite, ya que pueden impedir que el motor de base de datos utilice técnicas de compresión u optimización.


6 Complejidad innecesaria

El último problema de rendimiento de las consultas SQL que analizaremos es la complejidad innecesaria, que se produce cuando se escriben o utilizan consultas que son más complicadas de lo necesario. La complejidad innecesaria puede causar problemas de rendimiento, como un mayor tiempo de ejecución, consumo de memoria o tráfico de red. Para evitar una complejidad innecesaria, debe seguir algunos procedimientos recomendados, como el uso de alias para tablas y columnas, el uso de comentarios para explicar la lógica, el uso de formato y sangría coherentes, evitar el código anidado o repetido y dividir las consultas complejas en otras más sencillas. También debe usar herramientas como planes explicativos, analizadores de consultas o monitores de rendimiento para identificar y solucionar los cuellos de botella o las ineficiencias de las consultas.


7 Esto es lo que hay que tener en cuenta

-  If a FULL TABLE SCAN is taking place, we should first check for the number of rows actually required by the operation. If more than 10% rows are result set then creating index is of not much help. We should also consider table Joining order and Joining method. Sometimes due to inadequate statistics optimizer picks up inefficient join method or order.

Many times the data being retrieved is very huge in such cases we should consider moving those queries to standby database.

- You can use database views to have better performance than improper indexing. A database view is a subset of a database and is based on a query that runs on one or more database tables. Database views are saved in the database as named queries and can be used to save frequently used complex queries. There are two types of database views: dynamic views and static views. In-memory data load using in-memory databases can help with speeding up indexed entries.

- Evitar el tipio de dato boolean, cambiarlo por un char o number.


Fuentes.

Artículo:   "¿Qué problemas de rendimiento de las consultas SQL debe tener en cuenta?" Publicado en https://www.linkedin.com/ por varios el 30 nov 2023. Consultado el 30 nov 2023.

URL: https://www.linkedin.com/advice/0/what-sql-query-performance-issues-should-you-mtqrc?trk=contr


No hay comentarios:

Publicar un comentario