【Actualización continua】Sugerencias de optimización de SQL

1. Cree un índice en la tabla, dando prioridad a los campos utilizados por donde y agrupar por.

2. Trate de evitar el uso de select *, devolver campos inútiles reducirá la eficiencia de la consulta. como sigue:

SELECCIONE * DEL método de optimización t
: use campos específicos en lugar de *, y solo devuelva los campos usados.

3. Trate de evitar usar in y not in, lo que hará que el motor de la base de datos abandone el índice para escanear la tabla completa. como sigue:

SELECT * FROM t WHERE id IN (2,3)
SELECT * FROM t1 WHERE nombre de usuario IN (SELECT nombre de usuario FROM t2)
Método de optimización: Si es un valor continuo, puede ser reemplazado por entre. De la siguiente manera:
SELECCIONE * DESDE t DONDE id ENTRE 2 Y 3
Si es una subconsulta, puede usar exist en su lugar. De la siguiente manera:
SELECCIONE * DESDE t1 DONDE EXISTE (SELECCIONE * DESDE t2 DONDE t1.nombre de usuario = t2.nombre de usuario)

4. Intente evitar el uso de o, lo que hará que el motor de la base de datos abandone el índice para realizar un análisis completo de la tabla. como sigue:

SELECCIONE * DESDE t DONDE id = 1 O id = 3
Método de optimización: se puede usar unión en lugar de o. De la siguiente manera:
SELECT * FROM t WHERE id = 1
UNION
SELECT * FROM t WHERE id = 3
(PD: si los campos a ambos lados de o son iguales, como en el ejemplo. Parece que la eficiencia de los dos métodos es similar, incluso si la unión escanea el índice o escanea toda la tabla)

5. Intente evitar consultas inexactas al comienzo del campo, lo que hará que el motor de la base de datos abandone el índice y realice una exploración completa de la tabla. como sigue:

SELECCIONE * DESDE t DONDE el nombre de usuario LIKE '%li%'
método de optimización: intente usar una consulta difusa después del campo. De la siguiente manera:
SELECCIONE * DESDE t DONDE el nombre de usuario LIKE 'li%'

6. Trate de evitar juzgar el valor nulo, lo que hará que el motor de la base de datos abandone el índice para escanear la tabla completa. como sigue:

SELECCIONE * DESDE t DONDE la puntuación ES NULO
Método de optimización: puede agregar un valor predeterminado de 0 al campo y juzgar el valor de 0. De la siguiente manera:
SELECCIONE * DESDE t DONDE puntuación = 0

7. Trate de evitar realizar operaciones de función y expresión en el lado izquierdo del signo igual en la condición where, lo que hará que el motor de la base de datos abandone el índice y realice una exploración completa de la tabla. como sigue:

SELECT * FROM t2 WHERE score/10 = 9
SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'
Método de optimización: las expresiones y operaciones de funciones se pueden mover al lado derecho del signo igual. De la siguiente manera:
SELECCIONE * DESDE t2 DONDE puntuación = 10*9
SELECCIONE * DESDE t2 DONDE nombre de usuario LIKE 'li%'

8. Cuando la cantidad de datos sea grande, evite usar la condición donde 1=1. Por lo general, para facilitar el ensamblaje de las condiciones de consulta, usaremos esta condición de forma predeterminada y el motor de la base de datos abandonará el índice para escanear la tabla completa. como sigue:

SELECT * FROM t WHERE 1=1
Método de optimización: juzgue al ensamblar SQL con código, agregue dónde si no hay dónde, y agregue y si hay dónde.

Guess you like

Origin blog.csdn.net/heqiushuang110/article/details/127496755