-
首先是表空间 减少 磁盘io
my.ini目录下 innodb_file_per_table=1
2.对于已经有大量数据 进行分区操作流程
一,什么是mysql分表,分区
什么是分表,从表面意思上看呢,就是把一张表分成N多个小表
什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的 磁盘上
二、自定义规则分表
大表可以按照业务的规则来分解为多个子表。通常为以下几种类型,也可自己定义规则。
Range(范围)–这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。
Hash(哈希)–这中模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表。
Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
List(预定义列表)–这种模式允许系统通过预定义的列表的值来对数据进行分割。
Composite(复合模式) –以上模式的组合使用
3.下面是我操作进行的过程
-- 创建个临时表 和old表一样
CREATE TABLE mini_app_bulletin_temp LIKE mini_app_bulletin;
-- 把 old表数据插入到临时表中
INSERT INTO mini_app_bulletin_temp SELECT * FROM mini_app_bulletin;
-- 删除old表
DROP TABLE mini_app_bulletin;
-- 重新创建新表 然后进行分区
DROP TABLE IF EXISTS `mini_app_bulletin`;
CREATE TABLE `mini_app_bulletin` (
`id` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '主键id',
`title` varchar(512) CHARACTER SET utf8 DEFAULT NULL COMMENT '公告公示标题',
`content` longtext,
`tid` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '爬取公告的id用于验重',
`hits` int(11) DEFAULT '0' COMMENT '点击数',
`province` varchar(64) CHARACTER SET utf8 DEFAULT NULL COMMENT '省份',
`province_name` varchar(64) DEFAULT NULL COMMENT '省份名称',
`city` varchar(64) DEFAULT NULL COMMENT '城市',
`city_name` varchar(64) DEFAULT NULL COMMENT '城市名称',
`keywords` varchar(1024) CHARACTER SET utf8 DEFAULT NULL COMMENT '公告检索关键字',
`from_site` varchar(512) CHARACTER SET utf8 DEFAULT NULL COMMENT '公告来源网站',
`status` varchar(64) DEFAULT '0' COMMENT '是否贴标签',
`type` varchar(64) DEFAULT '1' COMMENT '公告类型1=招标公告;2=变更公告;3=中标公告',
`purchase_type` varchar(64) DEFAULT NULL COMMENT '采购类型 字典类型为 : bulletin_keyword parentId为: 5ea96ae460354383808db0510480e417',
`create_by` varchar(64) CHARACTER SET utf8 DEFAULT '' COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8 DEFAULT '' COMMENT '更新者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`remarks` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '备注信息',
`del_flag` char(1) CHARACTER SET utf8 DEFAULT '0' COMMENT '删除标记',
`tender_project_code` varchar(255) DEFAULT NULL COMMENT '招标项目编号',
`tenderer_code` varchar(255) DEFAULT NULL COMMENT '招标人统一社会信用代码',
`tender_agency_code` varchar(255) DEFAULT NULL COMMENT '招标代理统一社会信用代码',
`related_suppliers_code` varchar(1024) DEFAULT NULL COMMENT '相关供应商代码',
`organiz_form` varchar(64) DEFAULT '2' COMMENT '组织形式:1自行招标2委托招标',
`tenderer_name` varchar(255) DEFAULT NULL COMMENT '招标人名称',
`publish_date` varchar(255) DEFAULT NULL,
`open_bid_date` varchar(255) DEFAULT NULL,
`first_trial_date` datetime DEFAULT NULL COMMENT '初审时间',
`rechecking_date` datetime DEFAULT NULL COMMENT '复核时间',
`is_suspect_repeat` varchar(64) DEFAULT NULL COMMENT '疑似重复标识',
`total_budget` varchar(64) DEFAULT '0' COMMENT '项目总预算',
PRIMARY KEY (`id`,`tid`),
UNIQUE KEY `tid` (`tid`),
KEY `mini_app_bulletin_create_date` (`create_date`),
KEY `mini_app_bulletin_del_flag_create_date` (`del_flag`,`create_date`),
KEY `mini_app_bulletin_update_date` (`update_date`),
KEY `mini_app_bulletin_first_trial_date` (`first_trial_date`),
KEY `mini_app_bulletin_tender_project_code` (`tender_project_code`(191)),
KEY `mini_app_bulletin_related_suppliers_code` (`related_suppliers_code`(191)),
KEY `mini_app_bulletin_tenderer_code` (`tenderer_code`(191)),
KEY `mini_app_bulletin_tender_agency_code` (`tender_agency_code`(191)),
KEY `INDEX_ON_PROVINCE_NAME` (`province_name`),
KEY `INDEX_ON_TITLE` (`title`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序展示的公告数据'
PARTITION by KEY(tid)
PARTITIONS 7;
-- 插入之前的数据
INSERT INTO mini_app_bulletin SELECT * FROM mini_app_bulletin_temp;
根据时间的方式
DROP TABLE IF EXISTS `mini_app_bulletin`;
CREATE TABLE `mini_app_bulletin` (
`id` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '主键id',
`title` varchar(512) CHARACTER SET utf8 DEFAULT NULL COMMENT '公告公示标题',
`content` longtext,
`tid` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '爬取公告的id用于验重',
`hits` int(11) DEFAULT '0' COMMENT '点击数',
`province` varchar(64) CHARACTER SET utf8 DEFAULT NULL COMMENT '省份',
`province_name` varchar(64) DEFAULT NULL COMMENT '省份名称',
`city` varchar(64) DEFAULT NULL COMMENT '城市',
`city_name` varchar(64) DEFAULT NULL COMMENT '城市名称',
`keywords` varchar(1024) CHARACTER SET utf8 DEFAULT NULL COMMENT '公告检索关键字',
`from_site` varchar(512) CHARACTER SET utf8 DEFAULT NULL COMMENT '公告来源网站',
`status` varchar(64) DEFAULT '0' COMMENT '是否贴标签',
`type` varchar(64) DEFAULT '1' COMMENT '公告类型1=招标公告;2=变更公告;3=中标公告',
`purchase_type` varchar(64) DEFAULT NULL COMMENT '采购类型 字典类型为 : bulletin_keyword parentId为: 5ea96ae460354383808db0510480e417',
`create_by` varchar(64) CHARACTER SET utf8 DEFAULT '' COMMENT '创建者',
`create_date` date NOT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8 DEFAULT '' COMMENT '更新者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`remarks` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '备注信息',
`del_flag` char(1) CHARACTER SET utf8 DEFAULT '0' COMMENT '删除标记',
`tender_project_code` varchar(255) DEFAULT NULL COMMENT '招标项目编号',
`tenderer_code` varchar(255) DEFAULT NULL COMMENT '招标人统一社会信用代码',
`tender_agency_code` varchar(255) DEFAULT NULL COMMENT '招标代理统一社会信用代码',
`related_suppliers_code` varchar(1024) DEFAULT NULL COMMENT '相关供应商代码',
`organiz_form` varchar(64) DEFAULT '2' COMMENT '组织形式:1自行招标2委托招标',
`tenderer_name` varchar(255) DEFAULT NULL COMMENT '招标人名称',
`publish_date` varchar(255) DEFAULT NULL,
`open_bid_date` varchar(255) DEFAULT NULL,
`first_trial_date` datetime DEFAULT NULL COMMENT '初审时间',
`rechecking_date` datetime DEFAULT NULL COMMENT '复核时间',
`is_suspect_repeat` varchar(64) DEFAULT NULL COMMENT '疑似重复标识',
`total_budget` varchar(64) DEFAULT '0' COMMENT '项目总预算',
PRIMARY KEY (`id`,`tid`,create_date),
KEY `mini_app_bulletin_del_flag_create_date` (`del_flag`,`create_date`),
KEY `mini_app_bulletin_update_date` (`update_date`),
KEY `mini_app_bulletin_first_trial_date` (`first_trial_date`),
KEY `mini_app_bulletin_tender_project_code` (`tender_project_code`(191)),
KEY `mini_app_bulletin_related_suppliers_code` (`related_suppliers_code`(191)),
KEY `mini_app_bulletin_tenderer_code` (`tenderer_code`(191)),
KEY `mini_app_bulletin_tender_agency_code` (`tender_agency_code`(191)),
KEY `INDEX_ON_PROVINCE_NAME` (`province_name`),
KEY `INDEX_ON_TITLE` (`title`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序展示的公告数据'
partition by RANGE columns(create_date)
(
partition p0 values less than ('2019-01-01'),
partition p1 values less than ('2019-02-01'),
partition p2 values less than ('2019-03-01'),
partition p3 values less than ('2019-04-01'),
partition p4 values less than ('2019-05-01'),
partition p5 values less than ('2019-06-01'),
partition p6 values less than ('2019-07-01'),
partition p7 values less than ('2019-08-01'),
partition p8 values less than ('2019-09-01'),
partition p9 values less than ('2019-10-01'),
partition p10 values less than ('2019-11-01'),
partition p11 values less than ('2019-12-01'),
partition p12 values less than ('2020-01-01')
)
mysqlserver的文件夹张这样子
当需要更多的分区的时候
ALTER TABLE mini_app_bulletin ADD partition
(
partition p13 values less than ('2020-02-01')
)