la optimización del rendimiento de SQL (a)

En primer lugar, el impacto del factor de eficiencia de
1, la gran cantidad de datos
2, recupera chino
3, la base de datos de configuración del sistema

En segundo lugar, ver la eficiencia de la ejecución del proceso
a través de un simple análisis del plan de ejecución
1, para encontrar el punto más recursos consume
2, para reducir la tabla completa table_access exploración
3, tome el índice

En tercer lugar, la aplicación de la sql pasos
Aquí Insertar imagen Descripción

/*
顺序为有1-6,6个大步骤,然后细分,5-1,5-2,5-3,由小变大顺序,1-J,1-A,1-P,1-U,为并行次序
*/
--查询组合字段
(5)select (5-2) distinct(5-3) top(<top_specification>)(5-1)<select_list>
--连表
(1)from (1-J)<left_table><join_type> join <right_table> on <on_predicate>
        (1-A)<left_table><apply_type> apply <right_table_expression> as <alias>
        (1-P)<left_table> pivot (<pivot_specification>) as <alias>
        (1-U)<left_table> unpivot (<unpivot_specification>) as <alias>
--查询条件
(2)where <where_pridicate>
--分组
(3)group by <group_by_specification>
--分组条件
(4)having<having_predicate>
--排序
(6)order by<order_by_list>

En cuarto lugar, la estrategia de optimización
1, dibujado centro de la mesa, lo que reduce la cantidad de datos
2, las asignaciones anticipadas, hay algunos cálculos y trabajos estadísticos que hacer por delante de
3, tratar de evitar la realización de funciones (ninguna función) en condiciones donde el fuera de lugar
4, condiciones relacionadas con la Tabla toman el índice
5 , donde las condiciones para evitar la aparición de bucles anidados
6, reducir aún más la tabla de conexión condicional cantidad de datos

V. medidas de optimización
1, elige el menor número de registros como una mesa de ping-conducido, de adelante hacia atrás es recuperada para el registro mínimo en el frente de la tabla
2, cláusula WHERE utilizando los recuperada de forma secuencial desde la parte delantera, de acuerdo con el principio, la conexión entre las mesas debe ser escrito antes que el otro condición WHERE, que
puede filtrar las condiciones para el número máximo de registros debe ser escrito al final de la cláusula WHERE, así como en la lista enlazada se pueden filtrar debe primero ser filtrada
3, SELECT cláusula de evitar el uso '*'
4, reemplazando Dónde cláusula HAVING cláusula con
un alias 5, de la tabla
6, con una alternativa existe en, NO EXISTE reemplazar el en el NO
. 7, mesa conectada Alternativamente EXISTS
. 8, para evitar la columna de índice calculado utilizando como columnas en el cálculo del índice daría lugar a un fallo de índice
9, para evitar el uso no en la columna de índice (no se utiliza en las columnas indexadas causas de fallo de índice)
10, una unión, de manera alternativa o; UNION-ALL Alternativamente, el UNION
11, la atención. índice de combinación, el índice de la primera columna
12, y evitar el uso de iS NULL no es nulo en la columna de índice
13, cláusula ORDER BY se utiliza sólo en las dos condiciones índice rigurosas.
14, para evitar cambiar la columna de índice Tipo
15, evitando el uso de la operación intensiva de recursos (con DISTINCT, UNIÓN, menos, INTERSECT, ORDER BY)

Caso:
. 1, el que es y no es NULL NULL
  no se puede usar como un nulo índice de cualquier columna que contiene valores nulos no serán incluidos en el índice. Incluso si el índice de múltiples columnas tal caso a, hay una columna que contiene el valor NULL, la columna se excluye del índice. Esto significa que si hay un valor de la columna un valor nulo, incluso si la construcción de la columna de índice no mejorará el rendimiento.
  Cualquier uso que la cláusula es nula o no es instrucción nula optimizador no se le permite utilizar el índice.

2, no va a utilizar el índice en cuenta que el índice sólo se puede decir lo que existe en la tabla, pero no se puede decir lo que no existe en la tabla '=!'.
No utiliza el índice: SELECT * FROM empleado en el salario < > 3000;
uso índice: seleccione nombre_cuenta de transacción en la cantidad> 0;
utilizando un índice: SELECT * FROM empleado donde salario < 3,000 o salario> 3000;

3, la columna de acoplamiento, '||' está conectada a la función como un carácter otras funciones como índice deshabilitado.
Sin el uso de un índice: seleccione nombre_cuenta, la cantidad de transacción en la que nombre_cuenta || ACCOUNT_TYPE = 'AMEXA';
Uso Index: seleccione nombre_cuenta, cantidad de transacción en la que ACCOUNT_NAME = 'AMEX ' y ACCOUNT_TYPE = 'A';

4, '+' es la función matemática como otras funciones matemáticas como índice deshabilitado.
Sin utilizar un índice: seleccione nombre_cuenta, cantidad de la transacción en la cantidad + 3000> 5000;
Uso Índice: seleccione nombre_cuenta, cantidad de la transacción en la cantidad> 2000 ;

5, la misma columna de índice no se pueden comparar entre sí, lo que permitirá un escaneo completo de tabla
sin usar un índice: seleccione nombre_cuenta, la cantidad de transacción en la que nombre_cuenta = NVL (: acc_name, nombre_cuenta);
Uso Index: seleccione nombre_cuenta, la cantidad de transacción en la que nombre_cuenta como NVL (: acc_name, '%' );

6, al igual que la declaración con un comodín (%) es
no utilizando el índice: SELECT * FROM empleado donde last_name como '% cliton%';
el uso de índice: SELECT * FROM empleado donde last_name como 'c%'

7, IN y EXISTS
sin necesidad de utilizar un índice: ... donde la columna de (select * from ... donde ...);
Uso Índice: donde existe ... (seleccione 'X ' de ... donde ...);
al mismo tiempo como sea posible debe utilizarse para NO sustituir existe no EN , a pesar de que tanto el uso nO (no se puede utilizar el índice y reducir la velocidad), existe no superior a eficiencia de la consulta no en.

Publicado 66 artículos originales · ganado elogios 8 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq125281823/article/details/104447469
Recomendado
Clasificación