MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?
2017-11-14 19:45
761 查看
MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?
昨天面试新人的时候,遇到了这么一个问题,按照自己的想法大体聊了一些,但大多是感性的,并没有完整的了解why and how.今天查了一些相关的资料,包括《MySQL性能调优与架构设计》、《高性能Mysql》,慢慢的整体理解,请大家指正。
之一,为什么要分表?
分表,按形式,有水平分表和主附分表。
水平分表常见于按ID取模或者按日期将相同表结构的内容散列到不同的表上,主附分表常见于有对应关系的多张表,通过主外键进行关联。
1,解决磁盘系统最大文件限制
如大家所知,各文件系统对单个文件大小的限制是不一样的。
虽然在现代网站架构设计中,这个问题基本上不用考虑,但在面试时,如果能回答上来这点,可以让体现出较不错的计算机基础功底。
FAT16(最大分区2GB,最大文件2GB ,最大容量?)
FAT32(最大分区32GB,最大容量2TB,最大文件32G)
NTFS(最大分区2TB,最大容量,最大文件2TB)
ext3(最大文件大小: 2TB,最大文件极限: 仅受文件系统大小限制,最大分区/文件系统大小: 4TB,最大文件名长度: 255 字符)
2,减少增量数据写入时的锁对查询的影响,减少长时间查询造成的表锁,影响写入操作等锁竞争的情况
数据越来越多,查询逻辑比较复杂的情况下,可能造成表锁和行锁,会影响到正常的读写需求,如果把数据进行分表,典型的情况有按ID和日期进行分表,读取旧数据和写入新数据的操作在不同的表里,这样就可以避免单张表间产生的锁竞争,节省排队的时间开支,增加呑吐量。
需要注意的是,这里说的减少锁和排队的时间开支,并没有确切的说减少了cpu的运算开支,因为分表以后的运算需求还可能在同一台设备上。如果使用了分库分表则能取得更好的运算速度提升。
3,同2,由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需的检索行数变少,减少了磁盘IO,时延变短。
相关文章推荐
- 数据库分库分表如何避免“过度设计”和“过早优化” - SQL优化
- 数据库分库分表如何避免“过度设计”和“过早优化” - SQL优化
- mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?
- 如何设计高效合理的MySQL查询语句
- 设计高效的SQL语句进行查询优化
- MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
- 如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
- MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
- MYSQL性能优化分享(分库分表)
- 教您如何设计高效合理的MySQL查询语句(转)
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- MySQL查询优化:连接查询排序浅谈
- 如何结合hibernate进行复杂的查询功能设计
- MYSQL性能优化分享(分库分表)
- mysql中对查询结果进行排序
- 如何使用ERwin进行基于Mysql的数据库设计
- mysql查询优化之基于索引的排序
- 在S2SH整合中如何对其多表联合查询出来的数据,进行分页和排序
- 问:如何在SBO报表设计器中对LastName+FirstName进行条件查询
- MySQL如何利用索引优化ORDER BY排序语句