このセクションでは、既存のパーティションに関する情報を取得する方法 (いくつかの方法が可能) について説明します。そのような情報を取得する方法には次のものが含まれます。
SHOW CREATE TABLE
ステートメントを使用して、パーティション化されたテーブルの作成に使用されたパーティショニング句を表示する。SHOW TABLE STATUS
ステートメントを使用して、テーブルがパーティション化されているかどうかを判別する。INFORMATION_SCHEMA.PARTITIONS
テーブルを照会する。EXPLAIN PARTITIONS 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.37「SHOW TABLE STATUS 構文」を参照してください)。
パーティションに関する情報は、PARTITIONS
テーブルを含む INFORMATION_SCHEMA
からも取得できます。セクション21.13「INFORMATION_SCHEMA PARTITIONS テーブル」を参照してください。
指定された SELECT
クエリーでパーティション化されたテーブルのどのパーティションが使用されるかは、EXPLAIN PARTITIONS
を使用して判別できます。PARTITIONS
キーワードは、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: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using filesort
この場合、4 つのパーティションがすべて検索されます。ただし、次のようにパーティショニングキーを使用する制限条件をクエリーに追加すると、一致する値が含まれているパーティションのみがスキャンされることがわかります。
mysql> EXPLAIN PARTITIONS 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 PARTITIONS
では、普通の EXPLAIN SELECT
ステートメントと同様に、使用されているキーおよび使用可能なキーに関する情報が表示されます。
mysql> ALTER TABLE trb1 ADD PRIMARY KEY (id);
Query OK, 10 rows affected (0.03 sec)
Records: 10 Duplicates: 0 Warnings: 0
mysql> EXPLAIN PARTITIONS 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
に関する次の制約および制限に注目してください。
EXTENDED
およびPARTITIONS
キーワードは、同一EXPLAIN ... SELECT
ステートメント内で一緒に使用できません。そうしようとすると構文エラーになります。クエリーを検査するためにパーティション化されていないテーブルで
EXPLAIN PARTITIONS
を使用すると、エラーは発生しませんが、partitions
カラムの値は常にNULL
となります。
EXPLAIN PARTITIONS
出力の rows
カラムには、テーブルの合計行数が表示されます。
セクション13.8.2「EXPLAIN 構文」も参照してください。