index drop create check mysql optimization indexing

drop - ¿Tiene un índice<o> consultas MySQL?



show index mysql (5)

De MySQL Manual de referencia :

Un índice de árbol B se puede usar para comparaciones de columnas en expresiones que usan los operadores =,>,> =, <, <= o BETWEEN.

Para un gran número de filas, puede ser mucho más rápido buscar las filas a través de un índice de árbol que a través de un examen de tabla. Pero como señalan las otras respuestas, use EXPLAIN para averiguar la decisión de MySQL.

Si tengo una consulta como,

DELETE FROM table WHERE datetime_field < ''2008-01-01 00:00:00''

¿ datetime_field ayuda indexada de la columna datetime_field ? es decir, ¿el índice solo es útil cuando se usan pruebas de igualdad (o desigualdad), o es útil cuando se hace una comparación ordenada también?

(¡Las sugerencias para una mejor ejecución de esta consulta, sin volver a crear la tabla, también estarían bien!)



Lo hace, consulte con una tabla DESCRIBE SELECCIONAR DE ...


Tal vez. En general, si existe dicho índice, utilizará un análisis de rango en ese índice si no hay un índice "mejor" en la consulta. Sin embargo, si el optimizador decide que el rango terminará siendo demasiado grande (es decir, incluye más de, digamos 1/3 de las filas), probablemente no use el índice en absoluto, ya que es probable que un escaneo de tabla sea Más rápido.

Use EXPLAIN (en un SELECT; no puede EXPLICAR una eliminación) para determinar su decisión en un caso específico. Es probable que esto dependa de

  • Cuantas filas hay en la tabla
  • Cuál es el rango que estás especificando
  • ¿Qué más se especifica en la cláusula WHERE? No utilizará un análisis de rango de un índice si hay otro índice que "se ve mejor".

Un índice en el campo de fecha y hora definitivamente ayudará con las búsquedas basadas en el rango de fechas. Los usamos todo el tiempo en nuestras bases de datos y las consultas son ridículamente lentas sin los índices.