como optimizar consultas SQL: Optimizacion Consultas SQL
Optimizar consultas de SQL
1) La consulta de SQL se vuelve más rápida si usa los nombres de las columnas reales en la declaración SELECT en lugar de ‘*’.
Por ejemplo: escriba la consulta como
1 |
SELECT id, first_name, last_name, age, subject FROM student_details; |
En lugar de:
1 |
SELECT * FROM student_details; |
2) La cláusula HAVING se utiliza para filtrar las filas después de seleccionar todas las filas. Es como un filtro. No utilice la cláusula HAVING para ningún otro propósito.
Por ejemplo: escriba la consulta como
1 2 3 4 5 |
SELECT subject, count(subject) FROM student_details WHERE subject != 'Science' AND subject != 'Maths' GROUP BY subject; |
En lugar de:
1 2 3 4 |
SELECT subject, count(subject) FROM student_details GROUP BY subject HAVING subject!= 'Vancouver' AND subject!= 'Toronto'; |
3) A veces puede tener más de una subconsulta en su consulta principal. Intente minimizar el número de bloque de subconsulta en su consulta.
Por ejemplo: escriba la consulta como
1 2 3 4 5 |
SELECT name FROM employee WHERE (salary, age ) = (SELECT MAX (salary), MAX (age) FROM employee_details) AND dept = 'Electronics'; |
En lugar de:
1 2 3 4 5 |
SELECT name FROM employee WHERE salary = (SELECT MAX(salary) FROM employee_details) AND age = (SELECT MAX(age) FROM employee_details) AND emp_dept = 'Electronics'; |
4) Utilice el operador EXISTS, IN y las combinaciones de tabla de forma adecuada en su consulta.
a) Por lo general, IN tiene el rendimiento más lento.
b) IN es eficiente cuando la mayoría de los criterios de filtro están en la subconsulta.
c) EXISTS es eficiente cuando la mayoría de los criterios de filtro se encuentran en la consulta principal.
Por ejemplo: escriba la consulta como
1 2 3 |
Select * from product p where EXISTS (select * from order_items o where o.product_id = p.product_id) |
En lugar de:
1 2 3 |
Select * from product p where product_id IN (select product_id from order_items |
5) Use EXISTS en lugar de DISTINCT cuando use uniones, lo que implica que las tablas tengan una relación de uno a varios.
Por ejemplo: escriba la consulta como
1 2 3 |
SELECT d.dept_id, d.dept FROM dept d WHERE EXISTS ( SELECT 'X' FROM employee e WHERE e.dept = d.dept); |
En lugar de:
1 2 3 |
SELECT DISTINCT d.dept_id, d.dept FROM dept d,employee e WHERE e.dept = e.dept; |
6) Trate de usar UNION ALL en lugar de UNION.
Por ejemplo: escriba la consulta como
1 2 3 4 5 |
SELECT id, first_name FROM student_details_class10 UNION ALL SELECT id, first_name FROM sports_team; |
En lugar de:
1 2 3 4 5 |
SELECT id, first_name, subject FROM student_details_class10 UNION SELECT id, first_name FROM sports_team; |
7) Tenga cuidado al usar las condiciones en la cláusula WHERE.
Por ejemplo: escriba la consulta como
1 |
SELECT id, first_name, age FROM student_details WHERE age > 10; |
En lugar de:
1 |
SELECT id, first_name, age FROM student_details WHERE age != 10; |
Escribe la consulta como
1 2 3 |
SELECT id, first_name, age FROM student_details WHERE first_name LIKE 'Chan%'; |
En lugar de:
1 2 3 |
SELECT id, first_name, age FROM student_details WHERE SUBSTR(first_name,1,3) = 'Cha'; |
Escribe la consulta como
ID SELECCIONAR, primer nombre, edad
DE student_details
DONDE el primer nombre LIKE NVL (: name, ‘%’);
En lugar de:
1 2 3 |
SELECT id, first_name, age FROM student_details WHERE first_name LIKE NVL ( :name, '%'); |
Escribe la consulta como
1 2 3 |
SELECT id, first_name, age FROM student_details WHERE first_name = NVL ( :name, first_name); |
En lugar de:
1 2 3 |
SELECT product_id, product_name FROM product WHERE unit_price BETWEEN MAX(unit_price) and MIN(unit_price) |
Escribe la consulta como
1 2 3 4 |
SELECT product_id, product_name FROM product WHERE unit_price >= MAX(unit_price) and unit_price <= MIN(unit_price) |
En lugar de:
1 2 3 4 |
SELECT id, name, salary FROM employee WHERE dept = 'Electronics' AND location = 'Bangalore'; |
8) Use DECODE para evitar el escaneo de las mismas filas o unirse a la misma tabla de manera repetitiva. DECODE también se puede utilizar en lugar de la cláusula GROUP BY o ORDER BY.
Por ejemplo: escriba la consulta como
1 2 3 |
SELECT id FROM employee WHERE name LIKE 'Ramesh%' and location = 'Bangalore'; |
En lugar de:
1 2 |
SELECT DECODE(location,'Bangalore',id,NULL) id FROM employee WHERE name LIKE 'Ramesh%'; |
9) Para almacenar objetos binarios grandes, primero colóquelos en el sistema de archivos y agregue la ruta del archivo en la base de datos.
10) Para escribir consultas que proporcionen un rendimiento eficiente, siga las reglas estándar generales de SQL.
a) Usa un solo caso para todos los verbos SQL
b) Comenzar todos los verbos SQL en una nueva línea
c) Separar todas las palabras con un solo espacio.
d) Verbos de alineación a derecha o izquierda dentro del verbo SQL inicial