mysql 消息表分区方案

  首先先看消息表创建脚本 我们用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 里 

原文地址:https://www.cnblogs.com/lianruihong/p/14004139.html