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

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 условие.

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

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