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

18.3.5. Obtaining Information About Partitions

This section discusses obtaining information about existing partitions, which can be done in a number of ways. Methods of obtaining such information include the following:

As discussed elsewhere in this chapter, SHOW CREATE TABLE includes in its output the PARTITION BY clause used to create a partitioned table. For example:

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)

The output from SHOW TABLE STATUS for partitioned tables is the same as that for nonpartitioned tables, except that the Create_options column contains the string partitioned. The Engine column contains the name of the storage engine used by all partitions of the table. (See Section 13.7.5.37, "SHOW TABLE STATUS Syntax", for more information about this statement.)

You can also obtain information about partitions from INFORMATION_SCHEMA, which contains a PARTITIONS table. See Section 20.14, "The INFORMATION_SCHEMA PARTITIONS Table".

It is possible to determine which partitions of a partitioned table are involved in a given SELECT query using EXPLAIN PARTITIONS. The PARTITIONS keyword adds a partitions column to the output of EXPLAIN listing the partitions from which records would be matched by the query.

Suppose that you have a table trb1 created and populated as follows:

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');

You can see which partitions are used in a query such as SELECT * FROM trb1;, as shown here:

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

In this case, all four partitions are searched. However, when a limiting condition making use of the partitioning key is added to the query, you can see that only those partitions containing matching values are scanned, as shown here:

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 provides information about keys used and possible keys, just as with the standard EXPLAIN SELECT statement:

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

You should take note of the following restrictions and limitations on EXPLAIN PARTITIONS:

The rows column of EXPLAIN PARTITIONS output displays the total number of rows in the table.

See also Section 13.8.2, "EXPLAIN Syntax".