Sunteți pe pagina 1din 5

Universidad Nacional Autnoma de Nicaragua

UNAN-LEN SEDE-SOMOTO

Sistemas gestores de base de datos II


Ingeniera en Sistema de Informacin, III ao

Tutor: Ing. Allan Padilla.

Elaborado por:
Edwin David Casco Sandigo

Somoto, Madriz, Nicaragua


Agosto, 2017

A la Libertad por la Universidad!


Tcnicas de optimizacin de consultas
Optimizacin READ SQL general para DB2 y Oracle
Estas tcnicas se aplican tanto a DB2 como a Oracle; no obstante, las reglas
parecen conseguir un mejor tiempo de respuesta en DB2.
Optimizar consultas basadas en las directrices de optimizacin de la
consulta
1. Indexe todos los predicados en clusulas JOIN, WHERE, ORDER BY y
GROUP BY. Por lo general, WebSphere Commerce depende en gran
medida de los ndices para mejorar el rendimiento y la escalabilidad de
SQL. Sin los ndices adecuados, las consultas SQL pueden causar
exploraciones de tabla, lo que provoca problemas de rendimiento o de
bloqueo. Se recomienda indexar todas las columnas de predicados. La
excepcin es cuando los datos de columna tienen una cardinalidad muy
baja.
2. Evite el uso de funciones en los predicados. La base de datos no utiliza
el ndice si hay una funcin en la columna. Por ejemplo:
SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'
Como resultado de la funcin UPPER(), los optimizadores de base de datos no
utilizan el ndice en COL1. Si la funcin se puede evitar en el SQL, es
necesario crear un ndice basado en funcin en Oracle o columnas generadas
en DB2 para mejorar el rendimiento.
3. Evite el uso del carcter comodn (%) al principio de un predicado. El
predicado LIKE '%abc' produce una exploracin de tabla completa. Por
ejemplo:
SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'
Esta es una limitacin de rendimiento conocida en todas las bases de datos.
4. Evite columnas innecesarias en la clusula SELECT. Especifique las
columnas en la clusula SELECT en lugar de utilizar SELECT *. Las
columnas innecesarias imponen cargas adicionales en la base de datos,
lo que ralentiza no slo el SQL especfico, sino todo el sistema.
5. Utilice la unin interna en lugar de la unin externa, si es posible. La
unin externa slo debe utilizarse si es necesario. La utilizacin de la
unin externa limita las opciones de optimizacin de la base de datos, lo
que suele dar como resultado una ejecucin ms lenta del SQL.
6. DISTINCT y UNION slo deben utilizarse si es necesario. Los
operadores DISTINCT y UNION causan la operacin de clasificacin, lo
que ralentiza la ejecucin de SQL. Utilice UNION ALL en lugar de
UNION, si es posible, ya que es mucho ms eficaz.
7. Oracle 10g y 11g requiere que las columnas CLOB/BLOB se coloquen al
final de las sentencias. De lo contrario, se produce un error cuando el
tamao del valor de entrada tiene ms de 1000 caracteres.
8. La clusula ORDER BY es obligatoria en SQL si el conjunto de
resultados clasificados es el previsto. La palabra clave ORDER BY se
utiliza para clasificar el conjunto de resultados por las columnas
especificadas. Sin la clusula ORDER BY, el conjunto de resultados se
devuelve directamente sin ninguna clasificacin. El orden no queda
garantizado. Tenga en cuenta el impacto del rendimiento que supone
aadir la clusula ORDER BY, ya que la base de datos necesita
clasificar el conjunto de resultados, lo que se convierte en una de las
operaciones ms costosas de la ejecucin de SQL.
Insertar predicados en la clusula OUTER JOIN siempre que sea posible
Para consultas SQL con el operador LEFT OUTER JOIN, trasladar predicados
de la tabla derecha de la clusula WHERE a la condicin ON ayuda al
optimizador de base de datos a generar una consulta ms eficaz. Los
predicados de la tabla izquierda pueden permanecer en la clusula WHERE.
Del mismo modo, para las consultas SQL con el operador RIGHT OUTER
JOIN, los predicados de la tabla derecha deberan trasladarse de la clusula
WHERE a la condicin ON.
Por ejemplo, la consulta subptima se reescribe insertando los predicados
aplicables a la tabla TAB_B en la clusula ON. Los predicados especficos de
TAB_A en la clusula WHERE pueden o bien permanecer o bien insertarse en
la clusula ON:
Sentencia SQL subptima:
SELECT TAB_A.COL1, TAB_B.COL1 FROM TAB_A LEFT OUTER JOIN
TAB_B ON TAB_A.COL3 = TAB_B.COL3 WHERE TAB_A.COL1=123 AND
TAB_B.COL2=456;
Sentencia SQL optimizada:
SELECT TAB_A.COL1, TAB_B.COL1 FROM TAB_A LEFT OUTER JOIN
TAB_B ON TAB_A.COL3 = TAB_B.COL3 AND TAB_B.COL2=456 WHERE
TAB_A.COL1=123;
Los predicados de las uniones INNER pueden permanecer en la clusula
WHERE. Si las tablas TAB_A y TAB_B se definen como vistas, el optimizador
puede insertar estos predicados en las vistas.
Duplicar la condicin de constante para diferentes tablas siempre que sea
posible
Cuando dos tablas, A y B, se unen y hay un predicado constante en una de las
columnas unidas, por ejemplo, A.id=B.id y A.id in (10, 12), el predicado
constante debera duplicarse para la columna unida de la segunda tabla. Es
decir, A.id=B.id y A.id en (10, 12) y B.id en (10, 12).
Por ejemplo, TAB_A tiene una relacin LEFT OUTER JOIN con TAB_B. Si hay
una condicin especfica de TAB_A y una condicin de tabla cruzada con
TAB_B, cree una condicin especfica de TAB_B adicional basada en el
requisito de TAB_A y mantenga las condiciones de tabla cruzada en la clusula
ON:
Sentencia SQL subptima:
SELECT TAB_A.COL1, TAB_B.COL1 FROM TAB_A LEFT OUTER JOIN
TAB_B ON TAB_A.COL3 = TAB_B.COL3 WHERE TAB_A.COL1 IN (123, 456)
AND TAB_B.COL2=TAB_A.COL1;
Sentencia SQL optimizada:
SELECT TAB_A.COL1, TAB_B.COL1 FROM TAB_A LEFT OUTER JOIN
TAB_B ON TAB_A.COL3 = TAB_B.COL3 AND TAB_B.COL2 IN (123, 456)
AND TAB_B.COL2=TAB_A.COL1 WHERE TAB_A.COL1 IN (123, 456);
En especial, si el predicado constante slo tiene el valor 1 (es decir,
COL1=123), el segundo predicado tambin debe convertirse a un predicado
constante.
Por ejemplo:
Sentencia SQL subptima:
SELECT TAB_A.COL1, TAB_B.COL1 FROM TAB_A LEFT OUTER JOIN
TAB_B ON TAB_A.COL3 = TAB_B.COL3 WHERE TAB_A.COL1=123 AND
TAB_B.COL2=TAB_A.COL1;
Sentencia SQL optimizada:
SELECT TAB_A.COL1, TAB_B.COL1 FROM TAB_A LEFT OUTER JOIN
TAB_B ON TAB_A.COL3 = TAB_B.COL3 AND TAB_B.COL2=123 WHERE
TAB_A.COL1=123;

S-ar putea să vă placă și