Spec-Zone .ru
спецификации, руководства, описания, API
|
Рассмотрите эти выражения, где col_name
индексированный столбец:
col_name
IN(val1
, ...,valN
)col_name
=val1
OR ... 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.
Чтобы обновить таблицу индексируют статистику для наилучших оценок, используют ANALYZE TABLE
.