MySQL 5.1 リファレンスマニュアル :: 15 パーティショニング :: 15.3 パーティショニング管理 :: 15.3.4 パーティション情報の取得
« 15.3.3 パーティションのメンテナンス

15.4 パーティションの刈り込み »
Section Navigation      [Toggle]
  • 15.3 パーティショニング管理
  • 15.3.1 RANGE と LIST パーティションの管理
  • 15.3.2 HASH や KEY パーティションの管理
  • 15.3.3 パーティションのメンテナンス
  • 15.3.4 パーティション情報の取得

15.3.4. パーティション情報の取得

このセクションでは、存在するパーティションの情報を取得するいくつかの方法を紹介します。これらは:

  • SHOW CREATE TABLE ステートメントを使用して、パーティショニングされたテーブルの作成に使用されたPARTITION句を一覧する。

  • 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)

注:MySQL 5.1の最初のリリースでは、PARTITIONS 節は、HASH や KEY によってパーティショニングされたテーブルでは表示されませんでした。この問題は MySQL 5.1.6. で修正されました。

SHOW TABLE STATUS はパーティショニングされたテーブルにおいても動作します。MySQL 5.1.9に始まり、パーティショニングされていないテーブルと出力は同じですが、Create_options カラムに partitioned 文字列を含んでいます。MySQL 5.1.8 以前では、Engine カラムには必ず PARTITION の値が含まれていました。MySQL 5.1.9 に始まり、このカラムはテーブルに使用される全てのパーティションのストレージエンジンの名前を含んでいます。(このコマンドの詳細については、項12.5.4.27. 「SHOW TABLE STATUS 構文」 を参照してください。)

パーティションの情報は PARTITIONS テーブルが含まれる、INFORMATION_SCHEMA からも取得できます。項21.19. 「INFORMATION_SCHEMA PARTITIONS テーブル」 を参照してください。

MySQL 5.1.5 に始まり、EXPLAIN PARTITIONS を使用して、パーティショニングされたテーブルのどのパーティションが SELECT と関係しているかを判定することができます。PARTITIONS キーワードはクエリと照合されるれレコードを記したパーティションを表示する、EXPLAIN の出力結果に partitions カラムを追加します。

例えば、以下の様に定義・実装されたテーブル 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 となります。

項6.2.1. 「EXPLAINを使用して、クエリを最適化する」 も参照してください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates