mysql分表准则_Mysql分表准则

mysql分表准则_Mysql分表准则Mysql 分表准则在大量使用 mysql 时 数据量大 高访问时 为了提高性能需要分表处理 简介下 mysql 分表的标准 后续会继续补充环境 业务类型 OLTP 硬件 cpu 8cpu2 4GHZmem 48G 磁盘 raid56 sas 什么样的表需要拆分 根据表的体积 表的行数 访问特点来衡量表是否需要拆分一 拆分标准是 1 表的体积大于 2G 或行数大于 1000w 以单表主键等简单形式访问数据 这个时候

Mysql分表准则

在大量使用mysql时,数据量大、高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充

环境:

业务类型:OLTP

硬件:

cpu:8cpu 2.4GHZ

mem:48G

磁盘:raid5 6×sas

什么样的表需要拆分:根据表的体积、表的行数、访问特点来衡量表是否需要拆分

一.拆分标准是:

1.表的体积大于2G或行数大于1000w,以单表主键等简单形式访问数据,这个时候需要分表

2.表的体积大于2G或行数大于500W,以两表jion,小范围查询(结果集小100行)等形式访问数据,这个时候需要分表

3.表的体积大于2G或行数大于200w,以多表join,范围查询,order by,group by,高频率等复杂形式访问数据,尤其DML,这个时候需要分表

4.表的字段中含有text等大字段的、varchar(500)以上的、很少使用的字符型字段拆分成父子表,这种分表可以和以上联合使用

5.数据有时间过期特性的,需要做数据分表归档处理

只要达到上面任何一个标准,都需要做分表处理

二.分表方法:

1.冷热数据分表:适用小访问量,冷数据很少使用

1.1 单表字段很多,把频繁使用整型字段的和非频繁使用的字符型字段或大字段拆到两个表中

1.2 表数据具有时间过期性,把过期数据拆分到历史表里或者按时间梯度分表

2.横向分表:适用大访问量

2.1 如哈希等分切表或其他基于对某数字取余的切表,优点是方便数据分布,缺点是无法再扩展

2.2 按主键id递增分表,比如每100w个id一个分表,优点是方便扩展,缺点是压力不均

2.3 按日期分表,比如每天、每月、每年一个分表,优点是方便扩展,缺点是压力不均

说明

1.表的体积如何预估

CREATE TABLE `td_skate` (

`valid` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT ‘值id’,

`propertyid` BIGINT(20) NULL DEFAULT NULL COMMENT ‘属性id’,

`text` VARCHAR(400) NULL DEFAULT NULL,

`entext` VARCHAR(400) NULL DEFAULT NULL,

`picurl` VARCHAR(200) NULL DEFAULT NULL COMMENT ‘属性值说明图片,保存图片相对地址’,

`isother` BIGINT(20) NULL DEFAULT NULL COMMENT ‘是否是other值, 0  否  1  是’,

`createtime` DATETIME NULL DEFAULT NULL COMMENT ‘创建时间’,

`createuser` BIGINT(20) NULL DEFAULT NULL COMMENT ‘创建用户’,

`lastmodify` DATETIME NULL DEFAULT NULL COMMENT ‘最后修改时间’,

`updatetimeuser` BIGINT(20) NULL DEFAULT NULL COMMENT ‘最后修改人’,

`deletetime` DATETIME NULL DEFAULT NULL COMMENT ‘删除时间’,

`deleteuser` BIGINT(20) NULL DEFAULT NULL COMMENT ‘删除人’,

`description` VARCHAR(4000) NULL DEFAULT NULL COMMENT ‘产品描述’,

`isdelete` INT(11) NULL DEFAULT ‘0’,

PRIMARY KEY (`valid`),

INDEX `fk_td_prodline_attrval_td_prodline_attr` (`propertyid`),

CONSTRAINT `fk_td_prodline_attrval_td_prodline_attr` FOREIGN KEY (`propertyid`) REFERENCES `td_prodline_attr` (`propertyid`)

)

COLLATE=’utf8_general_ci’

ENGINE=InnoDB

AUTO_INCREMENT=;

把表的所有字段占用字节数相加,再乘以预估行数就是表的体积,比如上面的表,预估有1000W,那他的体积是

(8+8+400+400+200+8+8+8+8+8+8+8+4000+8)×=50.8G,可以看到这个表设计非常不合理,可以修改如下:

int替代bigint

timestamp替代datetime

状态位isdelete用tinyint替代

根据业务特点看能否把varchar(4000)放到一个字表中

优化后表大小:(4+4+400+400+200+4+4+4+4+4+4+4+1)×=10.37G,如果要进一步提升性能,需要删除外键,分表,保证单表在2G以下。

如果需要查看description信息,通过主键关联查看子表,只会扫描有效的子表信息, 性能将会提升非常大。

2.表的行数预估就很简单,根据业务特点,访问量等预估

——-end——

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216538.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:37
下一篇 2026年3月18日 上午11:38


相关推荐

  • window location href 跳转之后怎么获得后面带参数

    window location href 跳转之后怎么获得后面带参数functionGetRequest(){varurl=location.search;//获取url中"?"符后的字串vartheRequest=newObject();if(url.indexOf("?")!=-1){varstr=url…

    2022年7月13日
    36
  • 软件工程实验报告:图书管理系统

    软件工程实验报告:图书管理系统一、课程设计的目的与要求课程设计目的软件工程课程设计是学习软件工程课程后所进行的实践环节,目的是培养学生用工程化的思想和标准文档化的思想进行软件开发。本次课程设计通过开发一个小型实用的软件系统,亲身体验软件生命周期中的各个环节,以加深对软件工程课程的深入理解、锻炼独立分析、解决问题的能力。课程设计要求2.1课程设计准备1)复习软件工程课程的主要内容,熟练掌握软件生命周期的理论以及各阶段的基本概念。2)明确可行性分析、需求分析、设计、测试等阶段的基本任务和基本方法。3)熟练运用规范化的描述

    2022年8月22日
    14
  • idea 2021.11.3 激活_在线激活[通俗易懂]

    (idea 2021.11.3 激活)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html08…

    2022年3月28日
    44
  • 2019 美赛 A题

    2019 美赛 A题(新)2019美赛A题思路详解(纯干货)https://blog.csdn.net/i_CodeBoy/article/details/866636282019MCMProblemA:GameofEcologyInthefictionaltelevisionseriesGameofThrones,basedontheseriesofepic…

    2022年4月30日
    269
  • java backoff_Java BackOff类代码示例

    java backoff_Java BackOff类代码示例importorg.apache.beam.sdk.util.BackOff;//导入依赖的package包/类/***WritesabatchofmutationstoCloudDatastore.**Ifacommitfails,itwillberetriedupto{@link#MAX_RETRIES}times.All*mutations…

    2022年6月30日
    38
  • pytorch 自定义卷积核进行卷积操作[通俗易懂]

    pytorch 自定义卷积核进行卷积操作[通俗易懂]一卷积操作:在pytorch搭建起网络时,大家通常都使用已有的框架进行训练,在网络中使用最多就是卷积操作,最熟悉不过的就是torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True)通过上面的输入发现想自定义自己的卷积核,比如高斯…

    2022年5月28日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号