8.13.2. Индексируйте Оптимизацию Слияния

8.13.2.1. Индексировать Перекрестный Алгоритм Доступа Слияния
8.13.2.2. Индексировать Алгоритм Доступа Объединения Слияния
8.13.2.3. Индексировать Алгоритм Доступа Объединения сортировки слиянием

Метод Index Merge используется, чтобы получить строки с несколькими range сканирования и объединить их результаты в одного. Слияние может произвести объединения, пересечения, или объединения пересечений его базовых сканирований. Этот метод доступа слияния индексирует сканирования от единственной таблицы; это не объединяет сканирования через многократные таблицы.

В EXPLAIN вывод, метод Index Merge появляется как index_merge в type столбец. В этом случае, key столбец содержит список, индексирует используемый, и key_len содержит список самых длинных ключевых ролей для тех, индексирует.

Примеры:

SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;SELECT * FROM tbl_name  WHERE (key1 = 10 OR key2 = 20) AND non_key=30;SELECT * FROM t1, t2  WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')  AND t2.key1=t1.some_col;SELECT * FROM t1, t2  WHERE t1.key1=1  AND (t2.key1=t1.some_col OR t2.key2=t1.some_col2);

У метода Index Merge есть несколько алгоритмов доступа (замеченный в Extra поле EXPLAIN вывод):

Следующие разделы описывают эти методы более подробно.

Отметить

У Индексировать алгоритма оптимизации Слияния есть следующие известные недостатки:

  • Если у Вашего запроса есть комплекс WHERE пункт с глубоко AND/OR вложение и MySQL не выбирают оптимальный план, пытаются распределить сроки, используя следующие законы тождества:

    (x AND y) OR z = (x OR z) AND (y OR z)(x OR y) AND z = (x AND z) OR (y AND z)
  • Индексируйте Слияние, не применимо к полнотекстовому, индексирует. Мы планируем расширить это, чтобы покрыть их в будущем выпуске MySQL.

  • Перед MySQL 5.6.6, если сканирование диапазона возможно на некотором ключе, оптимизатор не будет рассматривать использование, Индексируют Объединение Слияния или Индексируют алгоритмы Объединения сортировки слиянием. Например, рассмотрите этот запрос:

    SELECT * FROM t1 WHERE (goodkey1 < 10 OR goodkey2 < 20) AND badkey < 30;

    Для этого запроса два плана возможны:

    • Индексировать сканирование Слияния, используя (goodkey1 < 10 OR goodkey2 < 20) условие.

    • Сканирование диапазона, используя badkey < 30 условие.

    Однако, оптимизатор рассматривает только второй план.

Выбор между различными возможными разновидностями Индексировать метода доступа Слияния и других методов доступа основан на сметах различных доступных параметров.




Spec-Zone.ru - all specs in one place