MySQL分區(qū)是將大表按照一定的規(guī)則拆分成多個(gè)小表來存儲數(shù)據(jù),這樣可以提高查詢效率,降低維護(hù)成本。但是在對分區(qū)表進(jìn)行查詢時(shí),我們需要注意表的數(shù)據(jù)存儲情況。
CREATE TABLE `my_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 /*!50100 PARTITION BY HASH (id) PARTITIONS 5 */; -- 將my_table分為5個(gè)分區(qū)
上面的代碼就是將一個(gè)名為my_table的表分為5個(gè)分區(qū)。接下來我們來看看每個(gè)分區(qū)存儲的數(shù)據(jù)。
-- 查看my_table各個(gè)分區(qū)存儲的數(shù)據(jù) SELECT table_name, partition_name, partition_ordinal_position, partition_method, partition_expression, partition_description, partition_comment, table_rows FROM INFORMATION_SCHEMA.PARTITIONS WHERE table_name='my_table'; -- 結(jié)果如下: +------------+----------------+-------------------------+----------------+---------------------+------------------+----------------+------------+ | table_name | partition_name | partition_ordinal_position | partition_method | partition_expression | partition_description | partition_comment | table_rows | +------------+----------------+-------------------------+----------------+---------------------+------------------+----------------+------------+ | my_table | p0 | 1 | HASH | id | 0<= id< 7340033 | NULL | 0 | | my_table | p1 | 2 | HASH | id | 7340033<= id< 14680067 | NULL | 0 | | my_table | p2 | 3 | HASH | id | 14680067<= id< 22020101 | NULL | 0 | | my_table | p3 | 4 | HASH | id | 22020101<= id< 29360135 | NULL | 0 | | my_table | p4 | 5 | HASH | id | 29360135<= id | NULL | 0 | +------------+----------------+-------------------------+----------------+---------------------+------------------+----------------+------------+
從上面的結(jié)果來看,我們可以得到以下結(jié)論:
- 每個(gè)分區(qū)的名字為p0、p1、p2、p3、p4;
- 分區(qū)的序列位置從1開始遞增;
- 分區(qū)的方法為HASH;
- 分區(qū)的表達(dá)式為id;
- 分區(qū)的描述為每個(gè)分區(qū)id的取值范圍;
- 每個(gè)分區(qū)的表數(shù)據(jù)行數(shù)都是0。
可以看到,我們需要通過查詢每個(gè)分區(qū)的數(shù)據(jù)來了解表的實(shí)際數(shù)據(jù)存儲情況。