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, "Управляя Переключаемой Оптимизацией".




Spec-Zone.ru - all specs in one place