|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Рассмотрите эти выражения, где col_name индексированный столбец:
col_nameIN(val1, ...,valN)col_name=val1OR ... ORcol_name=valN
Каждое выражение является истиной если col_name равно любому из
нескольких значений. Эти сравнения являются сравнениями диапазона равенства (где "диапазон" является единственным значением). Оптимизатор оценивает
стоимость чтения строк квалификации для сравнений диапазона равенства следующим образом:
Если есть уникальный индекс на col_name,
оценка строки для каждого диапазона 1, потому что самое большее у одной строки может быть данное
значение.
Иначе, оптимизатор может оценить счет строки для каждого диапазона, используя погружения в индексирование или индексировать статистику.
С индексируют погружения, оптимизатор делает погружение в каждом конце диапазона и использует число строк в
диапазоне как оценка. Например, выражение имеет три диапазона равенства, и
оптимизатор делает два погружения на диапазон, чтобы генерировать оценку строки. Каждая пара погружений приводит
к оценке числа строк, у которых есть данное значение. col_name IN (10, 20, 30)
Индексируйте погружения, обеспечивают точные оценки строки, но поскольку число сравнительных значений в выражении увеличивается, оптимизатор занимает больше времени, чтобы генерировать оценку строки. Использование индексирует статистику, менее точно, чем индексируют погружения, но разрешает более быструю оценку строки для больших списков значения.
eq_range_index_dive_limit
системная переменная позволяет Вам сконфигурировать число значений, в которых оптимизатор переключается от одной
стратегии оценки строки до другого. Чтобы отключить использование статистики и всегда использовать индексируют
погружения, устанавливают eq_range_index_dive_limit к 0. Чтобы разрешить использование индексируют
погружения для сравнений до N диапазоны равенства, набор eq_range_index_dive_limit
к N + 1.
eq_range_index_dive_limit
доступно с MySQL 5.6.5. Прежде 5.6.5, использование оптимизатора индексирует погружения, который эквивалентен eq_range_index_dive_limit=0.
Чтобы обновить таблицу индексируют статистику для наилучших оценок, используют ANALYZE TABLE.