MySQL数据库如何分区、分表

(1)问题分析:
考官主要想考察学员对MySQL数据的理解和拓展,有没有深入的去理解过数据库,有没有在项目开发中对数据库做过优化。
(2)核心答案讲解:
分区:就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的
分表:就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它分表可以通过三种方式:MySQL集群、自定义规则(根据一定的算法(如用hash的方式,也可以用求余(取模)的方式)让用户访问不同的表。)和merge存储引擎。
分区有四类:
RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
(3)问题扩展:
什么时候考虑使用分区?
①一张表的查询速度已经慢到影响使用的时候;②sql经过优化;③数据量大;④表中的数据是分段的;⑤对数据的操作往往只涉及一部分数据,而不是所有的数据。

分区解决的问题:
①主要可以提升查询效率。

什么时候考虑分表
①一张表的查询速度已经慢到影响使用的时候;②sql经过优化;③数据量大;④当频繁插入或者联合查询时,速度变慢。

分表解决的问题:
①分表后,单表的并发能力提高了,磁盘I/O性能也提高了,写操作效率提高了;②查询一次的时间短了;③数据分布在不同的文件,磁盘I/O性能提高;④读写锁影响的数据量变小;⑤插入数据库需要重新建立索引的数据减少。
(4)结合项目中使用:

点击此处
隐藏目录