Spec-Zone.ru › MariaDB

Флаг оптимизатора hash_join_cardinality

MariaDB, начиная с 10.6.13

Флаг оптимизатора hash_join_cardinality был добавлен в MariaDB 11.0.2, MariaDB 10.11.3, MariaDB 10.10.4, MariaDB 10.9.6, MariaDB 10.8.8 и MariaDB 10.6.13.

В MySQL и MariaDB, выходная мощность части запроса исторически была связана с используемым(ими) методом(ами) доступа. Это отличается от подхода, используемого в учебниках по базам данных. Там мощность «x JOIN y» одинакова независимо от используемых методов доступа для ее вычисления.

Пример

Рассмотрим запрос, объединяющий клиентов со своими заказами:

select * 
from 
  customer, orders, ...
where 
  customer.id = orders.customer_id and ...

Предположим, таблица заказов имеет индекс IDX по orders.customer_id.

Если план запроса использует этот индекс для извлечения заказов для каждого клиента, оптимизатор будет использовать статистику индекса из IDX для оценки количества строк в клиентах, объединенных с заказами.

С другой стороны, если оптимизатор рассматривает план запроса, который объединяет клиента с заказами без использования индексов, он полностью проигнорирует customer.id = orders.customer_id равенство и вычислит выходную мощность так, как если бы клиент был объединен с заказами перекрестным соединением.

Hash-соединение

MariaDB поддерживает Block Hash Join. По умолчанию он не включен, для его активации необходимо установить join_cache_level на 3 или большее значение.

До MDEV-30812, оптимизация запросов для Block Hash Join работала так, как описано в приведенном выше примере: она предполагала, что операция объединения является перекрестным соединением.

MDEV-30812 вводит новый флаг optimizer_switch, hash_join_cardinality. В версиях MariaDB до 11.0 он по умолчанию выключен.

Если его установить в ВКЛЮЧЕНО, оптимизатор будет использовать гистограммы столбцов при вычислении мощности выходных данных операции hash-соединения.

Вычисления можно увидеть в отслеживании оптимизатора, найдите hash_join_cardinality.

Содержание, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проходит предварительной проверки 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/hash_join_cardinality-optimizer_switch-flag/

Spec-Zone.ru

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