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

8.13.1.3. Оптимизация Диапазона равенства Много-оцененных Сравнений

Рассмотрите эти выражения, где col_name индексированный столбец:

col_name IN(val1, ..., valN)col_name = val1 OR ... OR col_name = valN

Каждое выражение является истиной если col_name равно любому из нескольких значений. Эти сравнения являются сравнениями диапазона равенства (где "диапазон" является единственным значением). Оптимизатор оценивает стоимость чтения строк квалификации для сравнений диапазона равенства следующим образом:

С индексируют погружения, оптимизатор делает погружение в каждом конце диапазона и использует число строк в диапазоне как оценка. Например, выражение 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.