Spec-Zone.ru › MySQL 5.7

22.3.5 Получение информации о разделах

В данном разделе рассматривается получение информации о существующих разделах, что можно сделать несколькими способами. Способы получения такой информации включают в себя следующее:

  • Использование оператора SHOW CREATE TABLE для просмотра положений разбиения, используемых при создании таблицы с разбиением.

  • Использование оператора SHOW TABLE STATUS для определения, является ли таблица разделенной.

  • Запрос к таблице схемы информации PARTITIONS.

  • Использование оператора EXPLAIN SELECT для просмотра разделов, которые используются заданным SELECT.

Как обсуждалось в других разделах этой главы, SHOW CREATE TABLE включает в свой вывод положение PARTITION BY, используемое для создания таблицы с разбиением. Например:

mysql> SHOW CREATE TABLE trb3\G
*************************** 1. row ***************************
       Table: trb3
Create Table: CREATE TABLE `trb3` (
  `id` int(11) default NULL,
  `name` varchar(50) default NULL,
  `purchased` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
PARTITION BY RANGE (YEAR(purchased)) (
  PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM,
  PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM,
  PARTITION p2 VALUES LESS THAN (2000) ENGINE = MyISAM,
  PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM
)
1 row in set (0.00 sec)

Вывод оператора SHOW TABLE STATUS для таблиц с разбиением такой же, как для неразделенных таблиц, за исключением того, что столбец Create_options содержит строку partitioned. Столбец Engine содержит имя механизма хранения, используемого всеми разделами таблицы. (См. Раздел 13.7.5.36, «Оператор SHOW TABLE STATUS» для получения дополнительной информации об этом операторе.)

Вы также можете получить информацию о разделах из INFORMATION_SCHEMA, которая содержит таблицу PARTITIONS. См. Раздел 24.3.16, «Таблица INFORMATION_SCHEMA PARTITIONS».

Определить, какие разделы разбиеной таблицы участвуют в заданном запросе SELECT, можно с помощью оператора EXPLAIN. Столбец partitions в выводе EXPLAIN перечисляет разделы, из которых записи будут соответствовать запросу.

Предположим, что у вас есть таблица trb1, созданная и заполненная следующим образом:

CREATE TABLE trb1 (id INT, name VARCHAR(50), purchased DATE)
    PARTITION BY RANGE(id)
    (
        PARTITION p0 VALUES LESS THAN (3),
        PARTITION p1 VALUES LESS THAN (7),
        PARTITION p2 VALUES LESS THAN (9),
        PARTITION p3 VALUES LESS THAN (11)
    );

INSERT INTO trb1 VALUES
    (1, 'desk organiser', '2003-10-15'),
    (2, 'CD player', '1993-11-05'),
    (3, 'TV set', '1996-03-10'),
    (4, 'bookcase', '1982-01-10'),
    (5, 'exercise bike', '2004-05-09'),
    (6, 'sofa', '1987-06-05'),
    (7, 'popcorn maker', '2001-11-22'),
    (8, 'aquarium', '1992-08-04'),
    (9, 'study desk', '1984-09-16'),
    (10, 'lava lamp', '1998-12-25');

Вы можете увидеть, какие разделы используются в запросе, таком как SELECT * FROM trb1;, как показано ниже:

mysql> EXPLAIN SELECT * FROM trb1\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: trb1
   partitions: p0,p1,p2,p3
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10
        Extra: Using filesort

В этом случае все четыре раздела будут просматриваться. Однако, когда к запросу добавляется ограничительное условие, использующее ключ разбиения, вы можете увидеть, что будут просматриваться только те разделы, которые содержат соответствующие значения, как показано ниже:

mysql> EXPLAIN SELECT * FROM trb1 WHERE id < 5\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: trb1
   partitions: p0,p1
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10
        Extra: Using where

EXPLAIN также предоставляет информацию о используемых ключах и возможных ключах:

mysql> ALTER TABLE trb1 ADD PRIMARY KEY (id);
Query OK, 10 rows affected (0.03 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> EXPLAIN SELECT * FROM trb1 WHERE id < 5\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: trb1
   partitions: p0,p1
         type: range
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 7
        Extra: Using where

Если оператор EXPLAIN PARTITIONS используется для проверки запроса к неразделенной таблице, ошибки не возникает, но значение столбца partitions всегда равно NULL.

Столбец rows вывода EXPLAIN отображает общее количество строк в таблице.

См. также Раздел 13.8.2, «Оператор EXPLAIN».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/partitioning-info.html

Spec-Zone.ru

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