web-dev-qa-db-ja.com

MySQLでテーブルパーティションサイズを確認する方法(それも可能ですか?)

テーブルを水平方向に分割しましたが、行が現在どのように分散されているかを確認したいと思います。 Webを検索しても、関連する結果は得られませんでした。

これが可能かどうか誰か教えてもらえますか?

13
user3010273

information_schemaを使用して各パーティションの行を取得できます。

これが私のサンプルテストです。

mysql> SELECT PARTITION_ORDINAL_POSITION, TABLE_ROWS, PARTITION_METHOD
       FROM information_schema.PARTITIONS 
       WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'tbl_name';
+----------------------------+------------+------------------+
| PARTITION_ORDINAL_POSITION | TABLE_ROWS | PARTITION_METHOD |
+----------------------------+------------+------------------+
|                          1 |          2 | HASH             |
|                          2 |          3 | HASH             |
+----------------------------+------------+------------------+

mysql> SHOW CREATE TABLE tbl_name\G
*************************** 1. row ***************************
       Table: p
Create Table: CREATE TABLE `tbl_name` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY HASH (a)
PARTITIONS 2 */
1 row in set (0.00 sec)


mysql> SELECT * FROM tbl_name;
+------+
| a    |
+------+
|    2 |
|    4 |
|    1 |
|    3 |
|    5 |
+------+
5 rows in set (0.00 sec)

更新しました

から MySQLマニュアル

パーティション化されたInnoDBテーブルの場合、TABLE_ROWS列に指定された行数は、SQL最適化で使用される推定値にすぎず、常に正確であるとは限りません。

@Constantineに感謝します。

21
Jason Heo

ジェイソンの答えに追加するために、リファレンスマニュアルに従って、テーブル上の既存のパーティションに関する情報を取得する次の方法があります-

  1. Show CreateTableの使用-パーティションテーブルの作成に使用されるパーティション句を表示します。 構文
    _show create table table_name;_
    サンプル出力
    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 )

  2. Show TableStatusの使用-テーブルがパーティション化されているかどうかを判別します。
    構文:
    _show table status in db_name like table_name;_
    サンプル出力:名前、エンジン、バージョン、データ長などのテーブルに関する多くの情報を表示します。出力の「Create_options」パラメーター。

  3. INFORMATION_SCHEMA.PARTITIONSテーブルのクエリ。
    (Jasonの回答を参照してください。オプションで、SUBPARTITION_NAME、SUBPARTITION_ORDINAL_POSITION、SUBPARTITION_METHOD、PARTITION_EXPRESSIONなどを追加できます。詳細については、パラメーターを選択してください。 MySQL Ref Manual を参照してください。

  4. ステートメントEXPLAINPARTITIONSSELECTの使用-特定のSELECTで使用されているパーティションを確認します
    構文:
    _EXPLAIN PARTITIONS SELECT * FROM trb1_
    サンプル出力:
    _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 Ref Manual

1
shashi009