如何在MySQL中查看表分区大小(甚至可能吗?)

时间:2013-12-31 00:18:32

标签: mysql database database-design database-schema partitioning

我已经水平分区了我的表,我想看看当前如何分配行。搜索网络没有带来任何相关结果。

有人能告诉我这是否可行?

2 个答案:

答案 0 :(得分:18)

您可以使用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 Manual

  

对于分区的InnoDB表,TABLE_ROWS列中给出的行计数仅是SQL优化中使用的估计值,并且可能并不总是准确的。

感谢@Constantine。

答案 1 :(得分:1)

为了添加Jason的答案,根据参考手册,您可以通过以下方式获取有关桌面上现有分区的信息 -

  1. 使用“显示创建表” - 查看创建分区表时使用的分区子句; 语法
    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 table status in db_name like table_name;
    示例输出:显示有关表格的大量信息,如名称,引擎,版本,数据长度等。您可以获得价值'分区'对于' Create_options'输出中的参数。

  3. 查询INFORMATION_SCHEMA.PARTITIONS表。
    (请参阅Jason的答案,您可以选择添加SUBPARTITION_NAME,SUBPARTITION_ORDINAL_POSITION,SUBPARTITION_METHOD,PARTITION_EXPRESSION等选择参数以获取更多信息。请参阅{{3} })

  4. 使用语句EXPLAIN PARTITIONS SELECT - 查看给定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

  5. 阅读更多信息MySQL Ref Manual