Pregunta

Si tengo una consulta como,

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

¿tener el datetime_field ¿Ayuda indexada por columnas?es decir.¿El índice sólo es útil cuando se utilizan pruebas de igualdad (o desigualdad), o también es útil cuando se hace una comparación ordenada?

(¡También estarían bien sugerencias para ejecutar mejor esta consulta, sin volver a crear la tabla!)

¿Fue útil?

Solución

Tal vez.En general, si existe dicho índice, utilizará un escaneo 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 utilizará el índice en absoluto, ya que es probable que un escaneo de la tabla sea más rápido.

Utilice EXPLAIN (en SELECT;no se 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 escaneo de rango de un índice si hay otro índice que "se ve mejor".

Otros consejos

De Manual de referencia de MySQL:

Se puede utilizar un índice de árbol B para comparaciones de columnas en expresiones que utilizan los operadores =, >, >=, <, <= o BETWEEN.

Para una gran cantidad 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 escaneo de tabla.Pero como señalan las otras respuestas, use EXPLAIN para conocer la decisión de MySQL.

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

Lo hace, consulte con una tabla DESCRIBE SELECT FROM...

Excepto que no tienes este error en MySQL. http://bugs.mysql.com/bug.php?id=58190

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top