Ubicación de columnas de alta cardinalidad en índices compuestos con consultas de rango
Al consultar una tabla con un índice compuesto que involucra una condición de rango, la ubicación de las columnas dentro del índice pueden afectar significativamente el rendimiento.
Considere los archivos de tabla con una clave principal (did, nombre de archivo) y dos índices compuestos: ÍNDICE (hora del archivo, ext) e ÍNDICE (ext, tiempo de archivo). Ambos índices contienen la columna de tiempo de archivo, que tiene una cardinalidad más alta que ext.
La consulta:
WHERE ext = '...' AND filetime BETWEEN ... AND ...
requiere acceder a datos basados tanto en ext como en filetime. Surge la pregunta: ¿qué índice es óptimo para tal consulta?
Análisis
Para determinar el índice óptimo, podemos usar FORCE INDEX y examinar los planes de ejecución:
-- Force range on filetime first FORCE INDEX(fe) SELECT COUNT(*), AVG(fsize) FROM files WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetime = '2015-01-01' AND filetimeEl resultado muestra que INDEX(ext, filetime) (ef) tiene un recuento de filas significativamente menor, lo que indica un escaneo más eficiente.
Seguimiento del optimizador
Para analizar más a fondo el comportamiento del optimizador, podemos utilizar el optimizador seguimiento:
SELECT explain_format = 'JSON'; SELECT COUNT(*), AVG(fsize) FROM files WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetimeEl seguimiento revela que el optimizador elige INDEX(ext, filetime) porque puede usar ambas columnas del índice para filtrar y recuperar datos. Por el contrario, INDEX(filetime, ext) solo puede usar la primera columna (filetime) para filtrar.
Conclusiones
Con base en el análisis, se pueden sacar las siguientes conclusiones dibujado:
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3