mysql null indexing cardinality

Es la cardinalidad NULL en un índice un problema-MySQL 5.x



indexing cardinality (2)

Estoy teniendo problemas de rendimiento en la versión en vivo de un sistema que no puedo reproducir localmente.

Al comparar algunos resultados de EXPLAIN en mis copias locales de la base de datos con la versión en vivo, observo que los índices de campos múltiples no se usan en algunos lugares en vivo sino que son locales, y una investigación más profunda muestra que estos índices tienen una cardinalidad de NULL en vivo

Supongo que este es el problema, pero ¿qué significa la cardinalidad NULL y provocará que no se use un índice? ¿Solucionará esto un Optimize y hay un medio para evitar que vuelva a ocurrir? No tengo acceso completo a la base de datos en vivo de MySQL, así que Analizar y Optimizar están fuera de mis capacidades normales.

¡Muchas gracias por sus respuestas!


De acuerdo con el hallazgo útil de fsb, supongo que está utilizando MyISAM, y sugeriría que se mueva a InnoDB, que se ha considerado un motor de mesa superior desde hace algunos años.

Una de las muchas características de InnoDB es el mantenimiento automático de índices .


La cardinalidad NULL en un índice de la tabla MyISAM se produce cuando se crea (o se trunca) una tabla y se rellena con datos. DESPUÉS de la carga, el usuario DEBE realizar una ''Tabla de análisis x'' para ganar efectivamente cardinalidad para esa tabla. Existe un problema similar en las tablas de InnoDB, donde la "Tabla de análisis x" debe realizarse periódicamente para garantizar un rendimiento óptimo del índice. El motor de la base de datos MySQL NO actualiza automáticamente la cardinalidad del índice, con excepción de las claves primarias de una sola columna.

La cardinalidad no NULL es crítica / requerida para que MySQL utilice ese índice.

Un poco sobre la cardinalidad: es una medida de la singularidad de un campo. Cuanto más único (mayor valor), más efectivo será un índice en ese campo y se tocarán menos registros. La cardinalidad NULL no es lo mismo que una cardinalidad 0 (cero).
Lea esto: MOSTRAR ÍNDICE

- JJ -