Spec-Zone .ru
спецификации, руководства, описания, API
|
Индексируйте Условие, Pushdown (ICP) является оптимизацией для случая, где MySQL получает строки от таблицы,
используя индексирование. Без ICP механизм хранения пересекает индексирование, чтобы определить местоположение
строк в базовой таблице и возвращает их серверу MySQL, который оценивает WHERE
условие для строк. С ICP, включенным, и если части WHERE
условие может быть оценено
при использовании только полей от индексирования, сервер MySQL продвигает эту часть WHERE
условие вниз к механизму хранения. Механизм хранения тогда оценивает
продвинутый, индексируют условие при использовании элемента индекса и только если это удовлетворяется, строка,
считанная из таблицы. ICP может уменьшить число раз, механизм хранения должен получить доступ к базовой таблице
и числу раз, сервер MySQL должен получить доступ к механизму хранения.
Индексируйте Условие, оптимизация Pushdown используется для range
, ref
, eq_ref
, и ref_or_null
методы доступа, когда есть потребность получить доступ к полным
строкам таблицы. Эта стратегия может использоваться для InnoDB
и MyISAM
таблицы.
Чтобы видеть, как эта оптимизация работает, рассмотрите сначала, как индексировать сканирование продолжается, когда Индексируют Условие, Pushdown не используется:
Заставьте следующую строку, сначала читая индексировать кортеж, и затем при использовании индексировать кортежа определять местоположение и читать полную строку таблицы.
Протестируйте часть WHERE
условие, которое применяется
к этой таблице. Примите или отклоните строку, основанную на результате испытаний.
Когда Индексируют Условие, Pushdown используется, сканирование продолжается как это вместо этого:
Доберитесь следующая строка индексируют кортеж (но не полная строка таблицы).
Протестируйте часть WHERE
условие, которое применяется
к этой таблице и может быть проверено, используя только, индексирует столбцы. Если условие не
удовлетворяется, продолжите к индексировать кортежу для следующей строки.
Если условие удовлетворяется, используйте индексировать кортеж, чтобы определить местоположение и считать полную строку таблицы.
Протестируйте остающуюся часть 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, "Управляя Переключаемой
Оптимизацией".