sql >> Base de Datos >  >> RDS >> Mysql

Exploración de tabla completa costosa en seleccionar todo sin condición

Consulte el siguiente enlace para obtener más detalles

https://dev.mysql.com/doc /refman/8.0/en/table-scan-evitación.html

la causa del escaneo completo de la tabla está debajo

  • La tabla es tan pequeña que es más rápido realizar un escaneo de la tabla que molestarse con una búsqueda clave. Esto es común para tablas con menos de 10 filas y una longitud de fila corta.

  • No hay restricciones utilizables en la cláusula ON o WHERE para columnas indexadas.

  • Está comparando columnas indexadas con valores constantes y MySQL ha calculado (basado en el árbol de índices) que las constantes cubren una parte demasiado grande de la tabla y que un escaneo de la tabla sería más rápido

  • Está utilizando una clave con baja cardinalidad (muchas filas coinciden con el valor de la clave) a través de otra columna. En este caso, MySQL asume que al usar la clave probablemente hará muchas búsquedas clave y que un escaneo de la tabla sería más rápido.

para evitar el escaneo completo de la tabla, use lo siguiente:

  • Use ANALYZE TABLE tbl_name para actualizar las distribuciones clave para la tabla escaneada.

  • Use FORCE INDEX para la tabla escaneada para decirle a MySQL que los escaneos de tablas son muy costosos en comparación con el uso del índice dado:

    p.ej. SELECCIONE * DESDE t1, t2 ÍNDICE DE FUERZA (índice_para_columna) DONDE t1.col_name=t2.col_name;