Spec-Zone .ru
спецификации, руководства, описания, API

8.3.7. InnoDB и MyISAM Индексируйте StatisticsCollection

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

MySQL использует групповой размер среднего значения следующими способами:

Как групповой размер среднего значения для индексировать увеличения, индексирование менее полезно в тех двух целях, потому что среднее число строк на поиск увеличивается: Для индексирования, чтобы быть хорошим в целях оптимизации, лучше, чтобы каждый индексировал цель значения небольшое количество строк в таблице. То, когда данный индексирует значение, приводит к большому количеству строк, индексирование менее полезно, и MySQL, менее вероятно, будет использовать это.

Групповой размер среднего значения связывается с табличным количеством элементов, которое является числом групп значения. SHOW INDEX оператор выводит на экран значение количества элементов, основанное на N/S, где N число строк в таблице и S групповой размер среднего значения. То отношение приводит к приблизительному количеству групп значения в таблице.

Для соединения, основанного на <=> оператор сравнения, NULL не обрабатывается по-другому ни от какого другого значения: NULL <=> NULL, так же, как N <=> N для любого другого N.

Однако, для соединения, основанного на = оператор, NULL отличается от не -NULL значения: expr1 = expr2 не истина когда expr1 или expr2 (или оба), NULL. Это влияет ref доступы для сравнений формы tbl_name.key = expr: MySQL не будет получать доступ к таблице если текущая стоимость expr NULL, потому что сравнение не может быть истиной.

Для = сравнения, это не имеет значения сколько NULL значения находятся в таблице. В целях оптимизации соответствующее значение является средним размером не -NULL группы значения. Однако, MySQL в настоящий момент не позволяет тому среднему размеру быть собранным или использоваться.

Для InnoDB и MyISAM таблицы, Вы имеете некоторый контроль над набором табличной статистики посредством innodb_stats_method и myisam_stats_method системные переменные, соответственно. У этих переменных есть три возможных значения, которые отличаются следующим образом:

Если Вы склонны использовать много соединений то использование <=> вместо =, NULL значения не являются особенными в сравнениях и один NULL равно другому. В этом случае, nulls_equal соответствующий метод статистики.

innodb_stats_method у системной переменной есть глобальное значение; myisam_stats_method у системной переменной есть и глобальная переменная и значения сеанса. Установка глобального значения влияет на набор статистики для таблиц от соответствующего механизма хранения. Установка значения сеанса влияет на набор статистики только для текущего клиентского соединения. Это означает, что можно вынудить статистику таблицы быть регенерированной с данным методом, не влияя на другие клиенты, устанавливая значение сеанса myisam_stats_method.

Чтобы регенерировать табличную статистику, можно использовать любой из следующих методов:

Некоторые протесты относительно использования innodb_stats_method и myisam_stats_method: