Spec-Zone.ru › MariaDB

Статистика индексов

Как статистика индексов помогает оптимизатору запросов

Оптимизатор запросов MariaDB определяет лучший способ выполнения каждого запроса, в основном основываясь на деталях вовлеченных индексов.

Статистика индексов помогает принимать эти решения. Представьте, что вам нужно выбрать, где искать номер в телефонной книге или в вашей личной адресной книге. Вы бы выбрали личную адресную книгу, если это возможно, так как она (как правило!) содержит значительно меньше записей и быстрее подлежит поиску.

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

Группы значений

Статистика в основном основана на группах элементов индекса с одинаковым значением. В первичном ключе каждый индекс уникален, поэтому размер каждой группы равен единице. В неуникальном индексе у вас может быть несколько ключей с одинаковым значением. Худший пример — наличие больших групп с одинаковым значением, например, индекс по битовому полю.

MariaDB активно использует статистику среднего размера группы. Например, если есть 100 строк и двадцать групп с одинаковыми значениями индекса, средний размер группы будет равен пяти.

Однако средние значения могут искажаться крайними значениями, и виновником обычно являются значения NULL. В наборе из 100 строк может быть 19 групп со средним размером 1, в то время как остальные 81 значение — NULL. MariaDB может посчитать пять как хорошее среднее значение и выбрать использование этого индекса, а затем окажется, что необходимо прочитать 81 строку с идентичными ключами, что займет больше времени, чем альтернативный вариант.

Обработка значений NULL

Существует три основных подхода к проблеме значений NULL. Значения индекса NULL могут рассматриваться как единая группа (nulls_equal). Это обычно приемлемо, но если у вас много значений NULL, средний размер группы смещается в большую сторону, и оптимизатор может пропустить использование индекса для доступа ref, когда это было бы полезно. Это значение по умолчанию используется XtraDB/InnoDB и MyISAM. Подход nulls_unequal — это противоположный подход, где каждый NULL образует свою группу размером один. В свою очередь, средний размер группы смещается в меньшую сторону, и оптимизатор может использовать индекс для доступа ref, когда это не подходит. Это значение по умолчанию используется хранилищем Aria. Третий вариант заключается в полном игнорировании значений NULL при расчёте групп индекса.

Подходы по умолчанию могут быть изменены настройкой переменных сервера aria_stats_method, myisam_stats_method и innodb_stats_method.

Безопасные по отношению к NULL сравнения и обычные сравнения

Используемый оператор сравнения играет важную роль. Если два значения сравниваются с помощью <=> (см. null-safe-equal оператор сравнения), и оба являются NULL, возвращается 1. Если те же значения сравниваются с помощью = (см. equal оператор сравнения), возвращается NULL. Например:

SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
+---------+---------------+------------+
| 1 <=> 1 | NULL <=> NULL | 1 <=> NULL |
+---------+---------------+------------+
|       1 |             1 |          0 |
+---------+---------------+------------+

SELECT 1 = 1, NULL = NULL, 1 = NULL;
+-------+-------------+----------+
| 1 = 1 | NULL = NULL | 1 = NULL |
+-------+-------------+----------+
|     1 |        NULL |     NULL |
+-------+-------------+----------+


Независимая от движка статистика

MariaDB 10.0.1 представила способ сбора статистики независимо от хранилища данных. См. Независимая от движка статистика таблиц.


Статистика на основе гистограмм

Статистика на основе гистограмм была введена в MariaDB 10.0.2 и собирается по умолчанию с MariaDB 10.4.3.

См. также

  • Статистика пользователей. Этот плагин предоставляет статистику использования пользователей, клиентов, таблиц и индексов.
  • Постоянная статистика InnoDB
  • Независимая от движка статистика
  • Статистика на основе гистограмм
  • Игнорируемые индексы
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительную проверку со стороны MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/index-statistics/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API