Spec-Zone.ru › MariaDB

Оптимизация сдвигом условия в производную таблицу

Если запрос использует производную таблицу (или представление), первой операцией, которую попытается выполнить оптимизатор запроса, будет применение оптимизации слияния производной таблицы и слияние производной таблицы с родительским запросом. Однако эта оптимизация применима только в том случае, когда запрос внутри производной таблицы имеет объединение в качестве операции верхнего уровня. Если используется оператор GROUP-BY, DISTINCT или применяются окна функций, то оптимизация слияния производной таблицы неприменима.

В этом случае применима оптимизация сдвигом условия.

Введение в сдвиг условия

Рассмотрим пример

create view OCT_TOTALS as
select
  customer_id,
  SUM(amount) as TOTAL_AMT
from orders
where  order_date BETWEEN '2017-10-01' and '2017-10-31'
group by customer_id;

select * from OCT_TOTALS where customer_id=1

Примитивный способ выполнения вышеприведенного запроса состоит в

  1. Вычислении содержимого OCT_TOTALS (для всех клиентов).
  2. Затем, выбор строки с customer_id=1

Это очевидно неэффективно, если есть 1000 клиентов, тогда одна строка будет выполнять до 1000 раз больше работы, чем необходимо.

Однако оптимизатор может взять условие customer_id=1 и сдвинуть его вниз в представление OCT_TOTALS.

(TODO: Разъяснить здесь)

Свойства сдвига условия

  • Сдвиг условия доступен с MariaDB 10.2.
  • Задача Jira для него была MDEV-9197.
  • Оптимизация включена по умолчанию. Ее можно отключить, установив @@optimizer_switch флаг condition_pushdown_for_derived в значение OFF.

См. также

  • Сдвиг условия через окна функций (с MariaDB 10.3)
  • Сдвиг условия в подзапросы IN (с MariaDB 10.4)
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/condition-pushdown-into-derived-table-optimization/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API