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

¿MySQL utiliza índices existentes para crear nuevos índices?

No, no lo hará.

Teóricamente, un índice en (site, product, value, id) tiene todo lo necesario para crear un índice en cualquier subconjunto de estos campos (incluidos los índices en (product, value, id) y (value, id) ).

Sin embargo, no se admite la creación de un índice a partir de un índice secundario.

Primero, MySQL no admite el escaneo rápido de índice completo (es decir, escanear un índice en orden físico en lugar de lógico), lo que hace que una ruta de acceso al índice sea más costosa que la lectura de la tabla. Esto no es un problema para InnoDB , ya que la tabla en sí siempre está agrupada.

En segundo lugar, el orden de los registros en estos índices es completamente diferente, por lo que los registros deben ordenarse de todos modos.

Sin embargo, el principal problema con la velocidad de creación de índices en MySQL es que genera la orden en el sitio (simplemente insertando los registros uno por uno en un B-Tree ) en lugar de utilizar una fuente preordenada. Como mencionó @Daniel, la creación rápida de índices resuelve este problema. Está disponible como complemento para 5.1 y viene preinstalado en 5.5 .