Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL数据表分区策略及优缺点

MySQL数据表分区策略及优缺点分析

作者:岛上码农

项目开发中,随着数据库数据量越来越大,单个表中数据太多,从而导致查询速度变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。因此我们需要考虑分表与分区,MySQL分表分区就是为了解决大数据量导致MySQL性能低下的问题。

为什么需要分区?

当面对巨大的数据表的时候,至少有一件事情是确定的,表太大了以至于每次查询的时候我们没法做全表扫描。而这个时候也没法使用索引,或者说索引意义不大,更不用说索引的维护代价和空间占用非常高。如果是依赖索引,会导致大量的碎片和低聚集度的数据,这会导致查询的时候有上千次的随机 I/O 访问而导致宕机。这种情况下一般只会使用1-2个索引,而不会更多。这种情况下,有两个可行的选项:查询必须从数据表的指定的部分顺序查找或者是期望的部分数据及其索引与服务器的内存匹配。

需要再次重申:在存储空间过大时,除非索引覆盖了整个查询,否则二叉树索引就无法发挥作用。服务端需要查找数据表的一整行数据,并且会在一个大空间跨度里执行随机 I/O 操作,这会导致查询响应时间无法接受。而维护索引(磁盘空间,I/O 操作)的代价同样很高。

而这是分区能够解决的问题。这其中的关键就是分区是索引的一个初级形式,它的负荷低并且能够让我们从临近的数据中获取结果。这种情形下,我们可以依次扫描相邻的数据或者是将临近的数据加载到内存进行检索。分区之所以负荷低是因为它并没有指针指向对应的数据行,也不需要被更新。分区并不精确地将数据按行划分,也没有涉及到所谓的数据结构。实际上,分区相当于对数据进行了分类。

分区的策略

对于大数据表,有两种策略进行分区:

分区隐患

两种分区策略是基于两个关键假设:在查询的时候可以通过过滤分区缩小查找范围,且分区自身的代价不高。然而,这两个假设未必总是有效,下面是可能遇到的问题:

如上所述,分区并不是完美解决方案,目前版本的 MySQL还有一些其他的约束:

当然,随着 MySQL 版本的更新迭代,对分区的支持也越来越好,并且很多分区的问题都得到了修复。

以上就是MySQL数据表分区策略及优缺点分析的详细内容,更多关于MySQL数据表分区策略及优缺点的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文