Является ли NULL кардинальностью в индексе проблемой - MySQL 5.x - PullRequest
12 голосов
/ 29 июня 2011

У меня проблемы с производительностью в живой версии системы, которую я не могу воспроизвести локально.

Сравнивая несколько результатов EXPLAIN для моих локальных копий базы данных с живой, я отмечаю, что многопольные индексы не используются в некоторых местах в реальном времени, но используются локально, и дальнейшее исследование показывает,эти показатели имеют кардинальное значение NULL в прямом эфире.

Я предполагаю, что это проблема, но что означает NULL кардинальность и приведет ли это к тому, что индекс не будет использоваться?Исправит ли это Optimize и есть ли способ предотвратить его повторение?У меня нет полного доступа к действующей базе данных MySQL, поэтому анализ и оптимизация выходят за рамки моих обычных возможностей.

Большое спасибо за любые ответы!

Ответы [ 2 ]

16 голосов
/ 27 июля 2011

Значение NULL в индексе таблицы MyISAM возникает при создании (или усечении) таблицы и заполнении данными. ПОСЛЕ загрузки пользователь ДОЛЖЕН выполнить «Анализ таблицы х», чтобы эффективно получить мощность для этой таблицы. Аналогичная проблема существует в таблицах InnoDB, где необходимо периодически выполнять «Анализ таблицы х» для обеспечения оптимальной производительности индекса. Механизм базы данных MySQL НЕ автоматически обновляет количество элементов индекса, за исключением первичных ключей с одним столбцом.

Не-NULL кардинальность критически важна / требуется для MySQL для использования этого индекса. Немного о кардинальности: это мера уникальности поля. Чем уникальнее (чем выше значение), тем эффективнее будет индекс для этого поля, и будет затронуто меньше записей. Значение NULL не совпадает с количеством элементов 0 (ноль).
Читать это: ПОКАЗАТЬ ИНДЕКС

- JJ -

1 голос
/ 22 июля 2011

В соответствии с полезной находкой fsb, я предполагаю, что вы используете MyISAM, и предложил бы вам перейти на InnoDB, который уже несколько лет считается превосходным механизмом таблиц.

Одной из многих функций InnoDB является автоматическое обслуживание индексов .

...