bitsCN.com

Mysql分表准则

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=2491650;

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

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

int替代bigint

timestamp替代datetime

状态位isdelete用tinyint替代

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

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

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

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

-------end------bitsCN.com

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql分表准则_Mysql分表准则_MySQL相关推荐

  1. mysql分表的原则_Mysql分表准则

    Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: 业务类型:OLTP 硬件: cpu:8cpu 2.4GHZ ...

  2. mysql分表的原则_mysql分表规则(转)

    author:skate time:2013/05/14 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: ...

  3. mysql 分表原理_MYSQL 分表原理(转)

    简介: 引用MySQL官方文档中的一段话:MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合."相同"意味着所有表同样的列 ...

  4. mysql如何根据业务分表设计_mysql分表分库的应用场景和设计方式

    很多朋友在论坛和留言区域问mysql在什么情况下才需要进行分库分表,以及采用何种设计方式才是最优的选择,根据这些问题,小编为大家整理了关于MySQL分库分表的应用场景和最优的设计方式举例. 一. 分表 ...

  5. mysql表分区和表空间_mysql分表和分区的区别浅析

    一.什么是mysql分表和分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上 二.my ...

  6. mysql分库分区分表怎么做_mysql 分区、分表、分库分表。

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁 ...

  7. mysql 表与表之间的条件比对_Mysql分库分表面试题(mysql高可用方案解析)

    数据库数据过大的系统架构-mysql分库分表高可用 如果当你的数据量达到千万级,亿级的时候,我们用常规的方式去做优化那么效果可能就不是很好了.这已经不是说性能的问题了,而是数据量响应的处理问题了,所以 ...

  8. mysql简单分表_mysql分区分表哪个好

    一,什么是e69da5e6ba9062616964757a686964616f31333365633933mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mys ...

  9. mysql分表技巧_MySQL分表操作的方法分析

    本节内容: mysql分表 一般来说,当数据库的数据超过了100w记录时就应该考虑分表或者分区了. 本文介绍下mysql分表的一些方法. 首先,需要想好到底分多少个表,前提当然是满足应用. 这里使用了 ...

最新文章

  1. [Pytorch]基于混和精度的模型加速
  2. 从小乡村走出的985高校博导坦言:读书这条路最简单!
  3. 全栈技术实践经历告诉你:开发一个商城小程序要多少钱?
  4. iOS 去除按钮的按下效果(阴影)
  5. Unity 游戏开发技巧集锦之创建部分光滑部分粗糙的材质
  6. TypeError: 'range' object doesn't support item deletion《机器学习实战》改进的随机梯度上升算法
  7. ssh连接虚拟机中mysql_用SSH连接Vmware redhat虚拟机
  8. GDB中应该知道的几个调试方法
  9. arcgis悬挂点修改_ArcGis拓扑的那些事儿(拓扑应用过程三)
  10. 算法训练营 重编码_参加编码训练营之前要考虑的7件事
  11. Java8新特性总结 - 3. Lambda表达式
  12. 第二章--电商项目DB规划
  13. 一文理解JDK静态代理、JDK动态代理、Cglib动态代理
  14. 09基于对象编程风格
  15. 37. 重定向 21
  16. Python学习笔记1—Python字符串
  17. Greenplum字段拼接
  18. java jdom jar_jdom jar下载_jdom jar官方下载-太平洋下载中心
  19. mysql模拟大量数据
  20. 玩转四旋翼无人机(仿真)

热门文章

  1. 基金指标: beta,alpha,Sharpe Ratio
  2. 双显示器(集成显卡不能显示,但独立显卡可以)
  3. 全面认识硬盘格式化 详解硬盘低格操作方法
  4. 2020年环境经济学国际研讨会(EEC 2020)
  5. KDD CUP 2017 回顾总结
  6. 学习笔记 - 预祝CSDN 1024程序猿节日圆满成功
  7. Netlogo 之 Extension
  8. 237_自定义抽签器三
  9. web 打印_联创打印系统推出Web版了!!
  10. 394所!2022年最新ESI大学排名出炉