2011-06-29 8 views
12

Tengo problemas de rendimiento en la versión en vivo de un sistema que no puedo reproducir localmente.No es un problema la cardinalidad NULL en un índice - MySQL 5.x

Al comparar algunos resultados de EXPLAIN en mis copias locales de la base de datos con el vivo, observo que los índices de campos múltiples no se usan en algunos lugares en vivo sino localmente, y una investigación más profunda muestra que estos índices tener 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 cualquier respuesta!

+0

¿Esto parece relevante: http://bugs.mysql.com/bug.php?id=40983 –

Respuesta

1

Según el hallazgo útil de fsb, supongo que está utilizando MyISAM, y le sugiero que se mueva a InnoDB, que se ha considerado un motor de mesa superior desde hace algunos años.

Una de las muchas funciones de InnoDB es automatic maintenance of indexes.

15

La cardinalidad NULL en un índice de 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 nula 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: SHOW INDEX

- JJ -

Cuestiones relacionadas