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

8.13.4. Индексируйте Кондайшна Пушдауна Оптимизэйшна

Индексируйте Условие, Pushdown (ICP) является оптимизацией для случая, где MySQL получает строки от таблицы, используя индексирование. Без ICP механизм хранения пересекает индексирование, чтобы определить местоположение строк в базовой таблице и возвращает их серверу MySQL, который оценивает WHERE условие для строк. С ICP, включенным, и если части WHERE условие может быть оценено при использовании только полей от индексирования, сервер MySQL продвигает эту часть WHERE условие вниз к механизму хранения. Механизм хранения тогда оценивает продвинутый, индексируют условие при использовании элемента индекса и только если это удовлетворяется, строка, считанная из таблицы. ICP может уменьшить число раз, механизм хранения должен получить доступ к базовой таблице и числу раз, сервер MySQL должен получить доступ к механизму хранения.

Индексируйте Условие, оптимизация Pushdown используется для range, ref, eq_ref, и ref_or_null методы доступа, когда есть потребность получить доступ к полным строкам таблицы. Эта стратегия может использоваться для InnoDB и MyISAM таблицы.

Чтобы видеть, как эта оптимизация работает, рассмотрите сначала, как индексировать сканирование продолжается, когда Индексируют Условие, Pushdown не используется:

  1. Заставьте следующую строку, сначала читая индексировать кортеж, и затем при использовании индексировать кортежа определять местоположение и читать полную строку таблицы.

  2. Протестируйте часть WHERE условие, которое применяется к этой таблице. Примите или отклоните строку, основанную на результате испытаний.

Когда Индексируют Условие, Pushdown используется, сканирование продолжается как это вместо этого:

  1. Доберитесь следующая строка индексируют кортеж (но не полная строка таблицы).

  2. Протестируйте часть WHERE условие, которое применяется к этой таблице и может быть проверено, используя только, индексирует столбцы. Если условие не удовлетворяется, продолжите к индексировать кортежу для следующей строки.

  3. Если условие удовлетворяется, используйте индексировать кортеж, чтобы определить местоположение и считать полную строку таблицы.

  4. Протестируйте остающуюся часть WHERE условие, которое применяется к этой таблице. Примите или отклоните строку, основанную на результате испытаний.

Когда Индексируют Условие, Pushdown используется, Extra столбец в EXPLAIN выходные шоу Using index condition. Это не будет показывать Index only потому что это не применяется, когда полные строки таблицы должны быть считаны.

Предположите, что у нас есть таблица, содержащая информацию о людях и их адресах и что таблице определили индексирование как INDEX (zipcode, lastname, firstname). Если мы знаем человека zipcode оцените, но не уверены в фамилии, мы можем искать как это:

SELECT * FROM people  WHERE zipcode='95054'  AND lastname LIKE '%etrunia%'  AND address LIKE '%Main Street%';

MySQL может использовать индексирование, чтобы отсканировать через людей с zipcode='95054'. Вторая часть (lastname LIKE '%etrunia%') не может использоваться, чтобы ограничить число строк, которые должны быть отсканированы, таким образом, без Индексируют Условие Pushdown, этот запрос должен получить полные строки таблицы для всех людей, которые имеют zipcode='95054'.

С Индексируют Условие Pushdown, MySQL проверит lastname LIKE '%etrunia%' часть прежде, чем считать полную строку таблицы. Это избегает читать все строки, соответствующие, все индексируют кортежи, которые не соответствуют lastname условие.

Индексируйте Условие, Pushdown включается по умолчанию; этим можно управлять с optimizer_switch системная переменная, устанавливая index_condition_pushdown флаг. См. Раздел 8.8.5.2, "Управляя Переключаемой Оптимизацией".