¿Existe alguna forma de optimizar SQL?
Durante el proceso de análisis, Oracle convertirá '*' en todos los nombres de columnas por turno, lo que se hace consultando el diccionario de datos, lo que significa más se necesita tiempo.
(2) Utilice el compromiso tanto como sea posible:
Siempre que sea posible, utilice COMMIT tanto como sea posible en el programa, de modo que se mejore el rendimiento del programa y los requisitos se liberarán debido a que los recursos de COMMIT se reducen. Los recursos liberados mediante el envío incluyen:
A. Información utilizada para restaurar datos en el segmento de reversión.
B. Bloqueo obtenido mediante declaración del programa.
C. Espacio en el búfer del registro de rehacer.
(3) Reemplace la cláusula HAVING con la cláusula Where:
Evite el uso de la cláusula HAVING, porque HAVING solo filtrará el conjunto de resultados después de que se hayan recuperado todos los registros. Este proceso requiere operaciones como clasificar y totalizar.
Si puede limitar el número de registros mediante la cláusula WHERE, puede reducir esta sobrecarga. Entre las tres cláusulas condicionales (no oráculo), on, donde y teniendo, on es la primera en ejecutarse, donde es la segunda y teniendo es la última. Debido a que filtra los registros que no cumplen con las condiciones antes de hacer estadísticas, puede reducir los datos que se procesarán mediante operaciones intermedias. Esta debería ser la más rápida, ya que filtra los datos antes de sumar y conecta dos. on cuando se hace referencia a tablas.
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 donde se puede usar la tecnología Rushmore, pero no tener, y este último Velocidad 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 presiona.
Debe filtrarse. Por tanto, si quieres que los filtros funcionen correctamente, primero debes entender este artículo.
Cuándo debería funcionar y luego decide dónde colocarlo.
⑷Reemplace IN con EXISTS y NOT IN con NOTAEXISTS:
En muchas consultas basadas en tablas básicas, para satisfacer una condición, generalmente es necesario conectar otra tabla.
En este caso, utilizar EXISTS (o NOTAXISTS) 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, NOTIN 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)
SELECT* FROM EMP (tabla base) donde EMPNO > 0 y existe (SELECT ' X ' FROM DEPT WHEREDEPT.DEPTNO = EMP. DEPTNO y LOC = 'MELB ')
(Ineficiente)
SELECT* FROM EMP(BASE TABLE) WHERE EMPNO > 0, DEPTNO IN(SELECT DEPTNO FROM DEPT , donde LOC = 'MELB ')
(5) Utilice índices para mejorar la eficiencia:
El índice es la parte conceptual de la tabla y se utiliza para mejorar la eficiencia de la recuperación de datos.
Oracle utiliza una compleja estructura de árbol B autoequilibrada. En términos generales, consultar datos por índice es más rápido que escanear toda la tabla. El optimizador de Oracle utiliza índices cuando Oracle encuentra la mejor ruta para ejecutar consultas y actualizar declaraciones. De manera similar, el uso de índices puede mejorar la eficiencia al unir varias tablas. Otra ventaja de utilizar un índice es que proporciona verificación de unicidad de la clave principal.
Para aquellos tipos de datos LONG o LONG RAW, casi todas las columnas se pueden indexar. Generalmente, el uso de índices es particularmente efectivo en tablas grandes. Por supuesto, también encontrará que el uso de índices también puede mejorar la eficiencia al escanear tablas pequeñas. Aunque el uso de índices puede mejorar la eficiencia de las consultas, también debe tener en cuenta sus costos.
Los índices requieren espacio para almacenarse y requieren un mantenimiento regular. Cada vez que se agrega o elimina un registro de la tabla o se modifica una columna de índice, se modifica el índice en sí. Esto significa que cada inserción, eliminación y actualización de registros costará de 4 a 5 veces la E/S del disco. Debido a que los índices requieren espacio de almacenamiento y procesamiento adicionales, estos índices innecesarios reducirán los tiempos de respuesta de las consultas. Es necesario reconstruir el índice periódicamente:
ALTERINDEX ltINDEXNAME gtRebuild lt nombre del espacio de tabla gt(18) Reemplace DISTINCT con EXISTS: al enviar una consulta que contenga tablas de información de uno a varios (como tablas de departamentos y tablas de empleados), evite usar DISTINCT en la cláusula SELECT. Generalmente, puede considerar usar EXISTS en su lugar, para que la velocidad de consulta sea más rápida, porque siempre que se cumplan las condiciones de la subconsulta, el módulo principal RDBMS devolverá los resultados.
Ejemplo:
(Ineficiente):
SELECTDISTINCT DEPT_NO, DEPT_NAME FROM DEPT D, EMP E donde D.DEPT_NO = E.DEPT_NO
(Eficiente):
SELECTDEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS(SELECT ' X FROM EMP E WHERE E. Número de departamento = D. Número de departamento);