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

En MySQL, ¿cómo crear un índice para acelerar esta consulta?

Para dar realmente una respuesta, sería útil ver si ya tiene índices existentes, pero...

Todo esto supone que existe la tabla 't' y necesita agregar un índice y actualmente solo tiene un índice único en su clave principal o ningún índice.

Un índice de cobertura para la consulta brindará el mejor rendimiento para sus necesidades, pero con cualquier índice sacrificará algo de velocidad de inserción. La importancia de ese sacrificio depende del perfil de su aplicación. Si lee principalmente de la tabla, no importará mucho. Si solo tiene unos pocos índices, incluso una carga de escritura moderada no importará. El espacio de almacenamiento limitado para sus mesas también puede entrar en juego... Debe hacer la evaluación final de la compensación y si es notable. Lo bueno es que es bastante un éxito constante. Por lo general, agregar un índice no ralentiza las inserciones de manera exponencial, sino lineal.

Independientemente, estas son sus opciones para obtener el mejor rendimiento seleccionado:

  1. Si c3 es su clave principal para la tabla t, no puede hacer nada mejor en la consulta para que sea más rápida con un índice.
  2. Suponiendo que c1 es su clave principal t:

    ALTER TABLE t ADD INDEX covering_index (c3,c2);  
    
  3. Si c1 no es tu pk (y tampoco lo es c2), usa esto:

    ALTER TABLE t ADD INDEX covering_index (c3,c2,c1);  
    
  4. Si c2 es tu PK usa esto:

    ALTER TABLE t ADD INDEX covering_index (c3,c1);  
    
  5. Si el espacio en el disco o la velocidad de inserción es un problema, puede optar por hacer un índice de puntos. Sacrificarás algo de rendimiento, pero si usas muchos insertos, podría ser la opción correcta:

    ALTER TABLE t ADD INDEX a_point_index (c3);