我已经水平分区了我的表,我想看看当前如何分配行。搜索网络没有带来任何相关结果。
有人能告诉我这是否可行?
答案 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的答案,根据参考手册,您可以通过以下方式获取有关桌面上现有分区的信息 -
使用“显示创建表” - 查看创建分区表时使用的分区子句;
语法:
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
)
使用显示表状态 - 确定表是否已分区;
的语法:强>
show table status in db_name like table_name;
示例输出:显示有关表格的大量信息,如名称,引擎,版本,数据长度等。您可以获得价值'分区'对于' Create_options'输出中的参数。
查询INFORMATION_SCHEMA.PARTITIONS表。
(请参阅Jason的答案,您可以选择添加SUBPARTITION_NAME,SUBPARTITION_ORDINAL_POSITION,SUBPARTITION_METHOD,PARTITION_EXPRESSION等选择参数以获取更多信息。请参阅{{3} })
使用语句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
阅读更多信息MySQL Ref Manual