Cargando



SQL Tuning o la optimización de SQL

Algunas consultas consumen más recursos que otras. Por ejemplo, las consultas que devuelven grandes conjuntos de resultados y las que contienen cláusulas WHERE que no son únicas siempre consumen muchos recursos. Ningún grado de inteligencia de las bases de datos sql hacen un buen trabajode optimizacion de consultas ni pueden eliminar el costo de recursos de estas construcciones en comparación con una consulta menos compleja.


mar 08 2014 22:22
Avanzado
mar 12 2014 18:52

SQL-logo.jpg


Algunas consultas consumen más recursos que otras. Por ejemplo, las consultas que devuelven grandes conjuntos de resultados y las que contienen cláusulas WHERE que no son únicas siempre consumen muchos recursos. Ningún grado de inteligencia de las bases de datos sql hacen un buen trabajode optimizacion de consultas ni pueden eliminar el costo de recursos de estas construcciones en comparación con una consulta menos compleja.

Podemos obtener los mismos resultados escribiendo diferentes consultas SQL. Pero el uso de la mejor consulta es importante cuando se considera el rendimiento. El SQL Tuning es el proceso de garantizar que las sentencias SQL que una aplicación genera se ejecutarán en el menor tiempo posible estas consultas SQL pueden ser optimizadas para un mejor rendimiento.

Técnicas de optimización o SQL Tuning
A continuacion veremos algunas técnicas de optimización

CASO 1: La consulta SQL se vuelve mas rapido si utiliza los nombres de los campos que el * como consulta de todos los campos de la tabla



SELECT * FROM clientes

Es mas optimo escribir la consulta de esta manera

SELECT id, nombre, direccion FROM clientes

CASO 2: La Clausula HAVING se utiliza para filtrar las filas despues de que se han seleccionado todas las filas.

SELECT materia, count(alumnos) cantidad_alumnos
FROM inscriptos
WHERE materia = 'Quimica'
AND materia = 'Historia'
GROUP BY materia;

Es mas optimo escribir la consulta de esta manera
SELECTmateria, count(alumnos) cantidad_alumnos
FROM inscriptos
GROUP BY materia
HAVING materia = 'Quimica'
AND materia = 'Historia'

CASO 3: A veces es posible que tengamos más de un subconsultas en la consulta principal. Veamos en el siguiente ejemplo como minimizar el bloque de subconsulta en su consulta.

Consultamos el empleado de mayor edad y mayor sueldo
.

SELECT nombre
FROM empleados
WHERE sueldo = (SELECT MAX(sueldo) FROM empleados)
AND edad = (SELECT MAX(edad) FROM empleados)
AND rubro= 'Electronica';

Es mas optimo escribir la consulta de la siguinete manera

SELECT nombre
FROM empleados
WHERE (sueldo, edad) = (SELECT MAX (sueldo), MAX (edad)
FROM empleados)
AND rubro = 'Electronica';


CASO 4: Uso del operador EXISTS, IN y uniones de tablas apropiadamente en su consulta es importante ya que son transaccion que ralentizan los accesos a los datos.

Generalmente el rendimiento más lento en canda consulta.
IN es eficiente cuando la mayor parte de los criterios de filtro se encuentra en la subconsulta.
Exist es eficiente cuando la mayor parte de los criterios de filtro esta en la consulta principal.

Veamos unos ejemplos


Select * from producto p
where producto_id IN
(select producto_id from pedidos)

Es mas optimo escribirlo de la siguiente manera

Select * from producto
where EXISTS (select * from pedidos
where pedidos.product_id = producto.product_id)


Utilizar exist en lugar de DISTINCT
Ejemplo ver que categorias tienen libros disponibles


SELECT DISTINCT categorias.id, categorias.categorias
FROM categorias, libros
WHERE categorias.id = libros.idcategoria;

Es mas optimo escribir la consulta de la siguiente manera

SELECT DISTINCT categorias.id, categorias.categorias
FROM categorias
WHERE EXISTS (SELECT 'X' FROM libros WHERE libros.idcategoria= categorias.id);

Estos son algunos consejos que permitira que se ahorren recursos al momento de ejecutar consultas sql y asi tener ademas una aplicacion con respuestas mas rapidas.

¿Te ayudó este Tutorial?


1 Comentarios

estimado haciendo una similitud según el caso 2: select ocupacion, count(empleado), count(area) from dbo.fm_empl_piso where ocupacion='ALMACENERO' and ocupacion='CONTADOR'
group by ocupación
no me muestra nada cuado ejecuto no es mejor darle un where in ('almacenero','contador')
No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X