MySQL分區是將大表按照一定的規則拆分成多個小表來存儲數據,這樣可以提高查詢效率,降低維護成本。但是在對分區表進行查詢時,我們需要注意表的數據存儲情況。
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個分區
上面的代碼就是將一個名為my_table的表分為5個分區。接下來我們來看看每個分區存儲的數據。
-- 查看my_table各個分區存儲的數據 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'; -- 結果如下: +------------+----------------+-------------------------+----------------+---------------------+------------------+----------------+------------+ | 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 | +------------+----------------+-------------------------+----------------+---------------------+------------------+----------------+------------+
從上面的結果來看,我們可以得到以下結論:
- 每個分區的名字為p0、p1、p2、p3、p4;
- 分區的序列位置從1開始遞增;
- 分區的方法為HASH;
- 分區的表達式為id;
- 分區的描述為每個分區id的取值范圍;
- 每個分區的表數據行數都是0。
可以看到,我們需要通過查詢每個分區的數據來了解表的實際數據存儲情況。