Обрезка и выборка по разделам
Когда условие WHERE связано с выражением разбиения, оптимизатор знает, какие разделы важны для запроса. Другие разделы не будут читаться. Эта оптимизация называется обрезкой по разделам.
EXPLAIN PARTITIONS можно использовать, чтобы узнать, какие разделы будут читаться для данного запроса. Столбец с именем partitions будет содержать список разделов, к которым был осуществлен доступ, разделённый запятыми. Например:
EXPLAIN PARTITIONS SELECT * FROM orders WHERE id < 15000000; +------+-------------+--------+------------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+--------+------------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | orders | p0,p1 | range | PRIMARY | PRIMARY | 4 | NULL | 2 | Using where | +------+-------------+--------+------------+-------+---------------+---------+---------+------+------+-------------+
Иногда условие WHERE не содержит необходимой информации для использования обрезки по разделам, или оптимизатор не может вывести эту информацию. Однако, мы можем знать, какие разделы важны для запроса. Начиная с MariaDB 10.0, мы можем принудительно заставить MariaDB обращаться только к указанным разделам, добавив предложение PARTITION. Эта функция называется выбором по разделам. Например:
SELECT * FROM orders PARTITION (p3) WHERE user_id = 50; SELECT * FROM orders PARTITION (p2,p3) WHERE user_id >= 40;
Предложение PARTITION поддерживается для всех операторов DML:
Обрезка по разделам и триггеры
В целом, обрезка по разделам применяется к операциям, содержащимся в триггерах.
Однако обратите внимание, что если определен триггер BEFORE INSERT или BEFORE UPDATE для таблицы, MariaDB не знает заранее, будут ли изменены столбцы, используемые в выражении разбиения. По этой причине он вынужден заблокировать все разделы.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/partition-pruning-and-selection/