首先先看消息表创建脚本 我们用hash分区 在字段 user_id 分成100个区
CREATE TABLE `messages` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID', `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '标题', `remark` varchar(2000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '详情', `target_id` int(11) NOT NULL DEFAULT '0' COMMENT '内容元素id', `target_user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户元素ID', `target_type` int(11) NOT NULL DEFAULT '0' COMMENT '类型', `poster` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '封面', `is_read` int(11) NOT NULL DEFAULT '0' COMMENT '0 未读 1 已读', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`,`user_id`), KEY `messages_user_id_target_type_index` (`user_id`,`target_type`,`is_read`) ) ENGINE=InnoDB AUTO_INCREMENT=17819 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci /*!50100 PARTITION BY HASH (user_id) PARTITIONS 100 */
|
我们添加一条数据再用EXPLAIN 看下,所添加的数据在哪个分区
explain SELECT * FROM yoshoptest.messages where user_id=220;
我们看到 user_id = 220 分配在PARTITIONS P20 里