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

ordenación eficaz de claves en un índice compuesto de MySQL (asociaciones WRT Rails Polymorphic y STI)

De mi propia investigación (pero no soy un DBA experto) he aprendido que hay dos cosas a considerar al decidir el orden de un índice de clave compuesta.

Primero, con respecto a la cardinalidad de las columnas, el índice generalmente es mejor para buscar columnas con alta cardinalidad. Por lo tanto, me inclinaría a colocar la columna con la cardinalidad más alta primero en el índice. Como referencia, hay un artículo titulado MySQL Query Optimization que dice:

En tu caso, el _id las columnas encajarían claramente mejor en esa definición, por lo que son un mejor candidato para ser un prefijo de la clave.

Otra cosa a considerar sería la reutilización de estos índices. La mayoría (si no todos) los sistemas de bases de datos permiten reutilizar un prefijo de una clave compuesta. Por ejemplo, una clave compuesta en (owner_id, owner_type) también podría ser utilizado por consultas en owner_id pero no en owner_type .

Entonces, por lo que explicó en su pregunta, es posible que esté mejor con dos índices:un índice de clave compuesto en (owner_id, owner_type) y otro en (owner_type) .

Finalmente, todo se reduce a su conjunto de datos y consultas. Pruebe múltiples escenarios, puntos de referencia utilizando diferentes órdenes de claves compuestas para ver cuál es la solución más óptima. Además, no olvide que los índices incurren en una penalización de escritura en sus tablas.

Actualizar :También hay otra pregunta SO bastante popular sobre el índice de clave compuesta:

¿Cuándo debo usar un índice compuesto?