Colección de citas famosas - Colección de consignas - Enumere formas de optimizar SQL.

Enumere formas de optimizar SQL.

No sólo debe escribir SQL, sino que también debe escribir SQL con un rendimiento excelente. El siguiente es el estudio del autor, un extracto y un resumen de algunos materiales, ¡y me gustaría compartirlos con usted!

(1) Seleccione el orden de nombre de tabla más efectivo (solo válido en el optimizador basado en reglas):

El analizador de ORACLE procesa la cláusula FROM de derecha a izquierda. Nombre de la tabla, la tabla. escrito al final de la cláusula FROM (tabla de controlador de tabla básica) se procesará primero. Cuando hay varias tablas en la cláusula from, se debe seleccionar la tabla con el menor número de registros como tabla base. Si se agregan más de tres tablas a la consulta, la tabla de intersección debe seleccionarse como la tabla básica. La tabla básica se refiere a la tabla a la que hacen referencia otras tablas.

(El orden de conexión en la cláusula donde.;

ORACLE analiza la cláusula WHERE en orden de abajo hacia arriba. Según este principio, la conexión entre tablas debe escribirse antes que otro WHERE condiciones, aquellas condiciones que pueden filtrar el número máximo de registros deben escribirse al final de la cláusula WHERE

(3) Evite el uso de ' * ' en la cláusula de selección:

< p. >Durante el proceso de análisis, ORACLE convertirá '*' en todos los nombres de columnas por turno. Este trabajo se realiza consultando el diccionario de datos, lo que significa que se requiere más tiempo

⑷ Reduzca el número de accesos a la base de datos. :

ORACLE hace mucho trabajo internamente: analizando sentencias SQL, estimando la utilización de índices, vinculando variables, leyendo bloques de datos, etc.

(5) Restableciendo el parámetro ARRAYSIZE en SQL* Además, SQL*Forms y Pro*C pueden aumentar la cantidad de datos recuperados por acceso a la base de datos. El valor recomendado es 200.

(6) Utilice la función de decodificación para reducir el tiempo de procesamiento:

.

El uso de la función DECODE puede evitar escanear repetidamente los mismos registros o conectar las mismas tablas.

(7) Integración simple y acceso a bases de datos no relacionadas:

Si tiene varias bases de datos simples. declaraciones de consulta, puede integrarlas en una consulta (incluso si no están relacionadas)

(8) Eliminar registros duplicados:

Ejemplo de la forma más eficiente de duplicar registros ( debido al uso de ROWID):

ELIMINAR DONDE E . ROWID & gt FROM EMP E (SELECT MINIMUM (X.ROWID)

FROM EMP X donde los segmentos Rollback se usan para almacenar información recuperable Si la transacción no se confirma, ORACLE restaurará los datos al estado antes de la eliminación (para ser precisos, al estado antes de que se ejecute el comando de eliminación). Cuando se usa TRUNCATE, el segmento de reversión ya no se almacena. información Cuando el comando se está ejecutando, los datos no se pueden recuperar, por lo que los recursos llamados serán muy cortos

(10) Utilice la confirmación cuando sea posible:

Siempre que sea. Es posible utilizar COMMIT tanto como sea posible en el programa, de modo que se mejore el rendimiento del programa y se reduzca la demanda debido a los recursos liberados por COMMIT:

Confirmar los recursos liberados:

A. Información utilizada para restaurar datos en el segmento de reversión

B. Bloqueo obtenido mediante la instrucción del programa

Rehacer espacio en el buffer del registro

<. >D.ORACLE gestiona los gastos internos en los tres recursos anteriores

Reemplace la cláusula HAVING con la cláusula Where:

Evite el uso de la cláusula HAVING, que solo filtrará el conjunto de resultados después. Se han recuperado todos los registros. Este proceso requiere operaciones como clasificar y totalizar. Si puede limitar la cantidad de registros mediante la cláusula WHERE, puede reducir esta sobrecarga. (No Oracle) Entre las tres cláusulas condicionales en, dónde y HAVING, on se ejecuta primero, seguido de dónde.

Por último, debido a que filtrar registros no calificados antes de hacer estadísticas, puede reducir los datos que se procesarán en la operación intermedia, y debería ser el más rápido donde debería ser más rápido que tener, porque filtra los datos antes de sumar, cuando hay dos tablas. conectado Úselo en, por lo que cuando use una tabla, deje dónde en lugar de tener comparaciones. En el caso de las estadísticas de consulta de tabla única, si las condiciones a filtrar no involucran los campos a calcular, sus resultados son los mismos, pero se puede usar la tecnología Rushmore, pero no la tiene, y esta última es más lenta. Si se trata de un campo a calcular, significa que el valor de este campo es incierto antes del cálculo. De acuerdo con el flujo de trabajo escrito en el artículo anterior, el tiempo de acción de dónde se completa antes del cálculo y solo entra en vigor después del cálculo. En consultas de unión de varias tablas, on funciona antes de dónde. El sistema primero combina varias tablas en una tabla temporal según las condiciones de conexión entre tablas, luego filtra por dónde, luego calcula y luego filtra por tener después del cálculo. Se puede ver que para filtrar correctamente las condiciones, primero debe comprender cuándo debe surtir efecto esta condición y luego decidir dónde colocarla.

(12) Reducir consultas de tabla:

En sentencias SQL con subconsultas se debe prestar especial atención a reducir las consultas de tabla. Ejemplo:

SELECT TAB_NAME FROM TABLE WHERE (TAB_NAME, DB_VER) = ( SELECT

TAB_NAME, DB_VER FROM TAB_COLUMNS WHERE VERSION = 604)

(13 ) mejora Eficiencia SQL a través de funciones internas.

SQL complejo a menudo sacrifica la eficiencia de la ejecución. Es muy significativo dominar los métodos anteriores de uso de funciones para resolver problemas en el trabajo real.

(14) Utilice el alias de la tabla:

Cuando conecte varias tablas en una declaración SQL, utilice el alias de la tabla y utilice el alias como prefijo de cada columna. . De esta manera, se reduce el tiempo de análisis y se reducen los errores de sintaxis causados ​​por ambigüedades en las columnas.

(15) Reemplazar IN por EXISTS y NOT IN por NOT EXISTS

En muchas consultas basadas en tablas básicas, para cumplir una condición, normalmente es necesario unirse a otra tabla . En este caso, utilizar EXISTE (o NO EXISTE) normalmente mejorará la eficiencia de la consulta. En la subconsulta, la cláusula NOT IN realizará la clasificación y fusión interna. En cualquier caso, NOT IN es el menos eficiente (porque realiza un recorrido completo de la tabla en la subconsulta). Para evitar usar NOT IN, podemos reescribirlo como conexión externa o NOT EXISTS.

Ejemplo:

(Eficiente) SELECCIONE * DE EMP(TABLA BASE) DONDE EMPNO > 0 Y EXISTE (SELECCIONE "X" DEL DEPARTAMENTO DONDE NÚMERO DE DEPARTAMENTO = EMPLEADO.

DEPTNO AND LOC = 'MELB ')

(Ineficiente) SELECT * FROM EMP (tabla base) WHERE EMPNO > 0 AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = ' MELB ')

(16) Identificar sentencias SQL de "ejecución ineficiente":

Aunque varias herramientas gráficas para la optimización de SQL están surgiendo en un flujo interminable, escribir sus propias herramientas SQL para resolver problemas es siempre la mejor manera:<. /p>

Ejecución SELECT, lectura de disco, adquisición de buffer,

ROUND((BUFFER _ GETS-DISK _ READS)/BUFFER _ GETS, 2) Hit_radio,

ROUND (lectura/ejecución de disco, 2) Reads_per_run,

SQL_Text

Desde V$SQLAREA

Ubicación de ejecución & gt0

AND BUFFER_GETS>0

AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS<0.8

ORDENADO POR 4 DESC;