Spec-Zone .ru
спецификации, руководства, описания, API

17.3.5. Получение информации О Разделах

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

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

mysql> SHOW CREATE TABLE trb3\G*************************** 1. row ***************************       Table: trb3Create Table: CREATE TABLE `trb3` (  `id` int(11) default NULL,  `name` varchar(50) default NULL,  `purchased` date default NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1PARTITION 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.35,"SHOW TABLE STATUS Синтаксис", для получения дополнительной информации об этом операторе.)

Можно также получить информацию о разделах от INFORMATION_SCHEMA, который содержит a PARTITIONS таблица. См. Раздел 19.14," INFORMATION_SCHEMA PARTITIONS Таблица".

Возможно определить, какие разделы разделенной таблицы включаются в данный SELECT использование запроса EXPLAIN PARTITIONS. PARTITIONS ключевое слово добавляет a 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 PARTITIONS SELECT * FROM trb1\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: trb1   partitions: p0,p1,p2,p3         type: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 10        Extra: Using filesort

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

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

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

mysql> ALTER TABLE trb1 ADD PRIMARY KEY (id);Query OK, 10 rows affected (0.03 sec)Records: 10  Duplicates: 0  Warnings: 0mysql> EXPLAIN PARTITIONS SELECT * FROM trb1 WHERE id < 5\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: trb1   partitions: p0,p1         type: rangepossible_keys: PRIMARY          key: PRIMARY      key_len: 4          ref: NULL         rows: 7        Extra: Using where

Следует принять во внимание следующие ограничения и ограничения на EXPLAIN PARTITIONS:

rows столбец EXPLAIN PARTITIONS вывод выводит на экран общее количество строк в таблице.

См. также Раздел 13.8.2,"EXPLAIN Синтаксис".