Como y cuando usar una sub consulta de sql es un punto muy importante para poder evitar un alto consumo. Esto así por que los sub query suelen utlizar muchos recursos de la base de datos, en este articulo aprenderemos cuando debemos usar esta instrucción.
Que es una subconsulta de sql ?
Una subconsulta es una instrucción SELECT normal anidada dentro de otra consulta, como una instrucción SELECT, UPDATE o DELETE. Ademas Una subconsulta también se conoce como selección interna o consulta interna, mientras que la consulta que contiene el subquerys se denomina selección externa o consulta externa.
Una subconsulta condición de selección en las cláusulas Select * from subquery WHERE o HAVING, siempre recordando que este ultimo se utiliza en conjunto con GROUP BY.
El resultado de una sub-consulta puede ser un valor simple o más de un valor. Según el retorno de la subconsulta, el operador de comparación que se utilice en la condición de selección del WHERE o HAVING
Cuando usar en base de datos
Tenemos una una tabla con valores de la cual Me gustaría obtener la suma de la columna 1, la suma de la columna 2 y la suma total. En Postgresql , mysql o sql server puedes hacerlo de esta manera:
SELECT *, a+b AS total_sum FROM
(
SELECT SUM(column1) AS a, SUM(column2) AS b
FROM table
)
Al usar esta sentencia estamos obligando al SGBD a generar dos consultas para poder mostrar una información que puede salir en una osea un doble esfuerzo.
Como deberia escribir la consulta
SELECT SUM(column1) AS a, SUM(column2) AS b,
SUM(column1)+SUM(column2) AS total
FROM table
las subconsultas son explicadas en mas detalle, en este articulo pero debemos, ademas de recordar que los subquerys son la causa de los problemas de rendimiento dentro de un servidor de base de datos. Las ocasionalmente reducir hasta 1000 veces el rendimiento de una consulta dependiendo de las cantidades utilizadas.
Select from where subquery o Join
Utilizar un JOIN sobre una sub consulta, puede ser incrementar de forma muy sustancial el rendimiento de tus consultas. Ejemplo de esto seria una tabla de producto y proveedor. en el siguiente ejemplo te muestro el motivo.
SELECT SUM(column1) AS a, SUM(column2) AS b,
SUM(column1)+SUM(column2) AS total
FROM producto
where proveedorid in ( select * from proveedor where name like 'A%' );
go
Como podemos ver en el Select * from subquery where la consulta del where se ejecuto y luego de generar una lista se ejecuto la segunda consulta en la tabla producto reduciendo significativamente el tiempo de respuesta de la consulta. Ademas te recomiendo que veas el articulo de como usar el operador LIKE para que puedas complementar este articulo.
Para resultados de menos de 100 registros esto puede ser imperceptible pero cuando hablamos de miles puede ser muy significativo. para mas información de como usar el join ver aqui.
En resumen
Las sub consultas son la principales fuentes de problemas de rendimiento, cuando se trata de obtener datos de varias tablas, se debe utilizar JOIN en lugar de subconsultas. Los subquerys solo deben usarse con buenas razones.
Gracias hasta la proxima :D!!
Bye :D!!