Mysql分表准则 在大量使用mysql时,数据量大、高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: 业务类型:OLTP 硬件: cpu:8cpu 2.4GHZ mem:48G 磁盘:raid5 6sas 什么样的表需要拆分:根据表的体积、表的行数、访问特

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------

mysql分表的原则_Mysql分表准则相关推荐

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

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

  2. mysql 分表 条件查询_mysql分表+查询

    最近面试,问到关与mysql数据库的分表一些问题,如设计一个千万级别的会员数据库,当时想到了分表,但是当问到如何跟据username查询到用户的信息时,这时,有点卡住了,所以为了让自已重新认识分表,而 ...

  3. mysql 分表和分区_Mysql分表和分区的区别

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

  4. mysql取出数据外键_mysql数据表有外键,应注意的几点(目前学习所获得的经验)...

    mysql : 1.有做外键的表子表和父表的引擎要一致才能添加数据:否则报外键约束错误 2.数据 类型要一致,不然添加补了 外键: 3.InnoDB和 myisam的区别(来源:PHP100中文网) ...

  5. mysql 多表查询 优化_Mysql 多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接)在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOI ...

  6. mysql建表的规则_MYSQL建表规则 - Love彼岸花开的个人空间 - OSCHINA - 中文开源技术交流社区...

    建立表规约 [强制]表名.字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只 出现数字.数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑. 说明:MySQL ...

  7. mysql多表查询练习_MySQL多表查询综合练习答案

    一.综合练习 1.1 init.sql文件内容 /* 数据导入: Navicat Premium Data Transfer Source Server : localhost Source Serv ...

  8. 用mysql建销售订单主表_mysql订单表如何设计?

    mysql订单表如何设计? 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品? 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品主键 ...

  9. mysql多表查询总结_MySQL多表查询总结

    MySQL术语: Redundacncy(冗余):存储两次或多次数据,以便实现快速查询. Primary Key(主键):主键是唯一的.表中每条记录的唯一标识. Foreign Key(外键):用于连 ...

最新文章

  1. xp与Linux双系统共存
  2. Python中的shape和reshape()
  3. [iOS Animation]-CALayer 性能优化实例
  4. LSA类型讲解——LSA-1【1类LSA——Router LSA】详解
  5. Redis学习总结(7)——怎么保持缓存与数据库一致性?
  6. Python中如何查看(打印输出)变量的数据类型
  7. 在框架中用JS设置target(用于location.href)
  8. 如何压缩jpg图片的大小
  9. 批量查询网站收录情况的站长工具
  10. 普罗米修斯监控mysql与邮件告警
  11. Inferred type S for type parameter S is not within its bound
  12. python的contour怎么画虚线_Python+Matplotlib画contour图
  13. 巨无霸Win8PE X64服务器维护专用,无垠PE组合WIN8PE ISO版v2017.09.23网络+维护版
  14. 橡胶接头分类和型号规格选择
  15. 水星WM150U无线网卡开机掉驱动的解决方法
  16. 基于java web的在线电影网_视频点播系统-计算机毕业设计
  17. IBM DB2 学习笔记:关系模型、基本概念、数据库实例基本操作、数据库对象
  18. 谁是卧底? 科普影子寄存器
  19. 如何设置Raspberry Pi Zero进行旅行
  20. caffe 制作数据集

热门文章

  1. 什么是稀疏动量网络(加速训练)
  2. 华为OD机试真题:分糖果【2022 Q1 Q2 |200分】
  3. 微信小程序保存图片到系统相册
  4. Go sync.RWMutex 实现线程安全 map 读写
  5. 二叉堆算法具体实现细节- Java实现
  6. 考公知识积累——人文常识
  7. PPT怎么转PDF?学会这招就够用了
  8. 文本检索系统-7:软件和数据
  9. 20个常见的Java错误以及规避方法
  10. ps4和xbox是linux吗,为什么说PS4不如Xbox?这就是原因