MySQL单机优化---分表、分区、分库

一、分表:

  水平分表:根据条件把数据分为N个表(例如:商品表中有月份列,则可以按月份进行水平分表)。

    使用场景:一张表中数据太多,查询效率太慢。

     当需要同时查询被水平分表的多张表时:

       在两条SQL语句中间加union,就能把两表数据合并展示。

      union:数据合并时去重。

       Union all:数据合并展示不去重。

 

  垂直分表:将表的字段拆出来变成一张表,两表通过外键建立一对一关系。

    使用场景:有些表记录数并不多,但是字段却很长,表占用空间很大,检索表时需要执行大量I/O,严重降低了性能。

     当需要同时用到两表的数据时,可以通过 left  join 进行两表查询。

 

二、分库:(配置多数据源)

    垂直分库:根据不同业务将不同的表分到不同的数据库。

    水平分库:将同一张表中的数据分到不同的数据库中。

 

三、分区:

    表没变,但是保存表数据的从一个文件被分成了多个文件,用户感知不到。

    分区的作用:     

       select *f rom dept where id in (1m2,3,4)

 

      从MySQL 5.1 中新增了分区(Partition)功能,优势也越来越明显了:

 

          --与单个磁盘或文件系统分区相比,可以存储更多的数据

 

          --很容易就能删除不用或者过时的数据

 

          --一些查询可以得到极大的优化 可以并发查询

 

          --涉及到 SUM()/COUNT() 等聚合函数时,可以并发进行

 

          --IO吞吐量更大(多台服务器)

     分区的方式:       

        常见分区方式:

 

          Range(范围       –基于一个给定的连续空间,把数据分配到不同分区。1-10 11-20

 

          List(预定义列表) –类似Range分区,区别在List分区是基于枚举出的值列表分区,而  Range分区是根据给定的连续区间范围分区 1,23   45,6

 

          Hash(哈希)–这中模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分        区的表。这个根据给定的分区个数,把数据分配到不同的分区。

 

          Key(键值)-上面Hash模式的一种延伸,这里的Hash KeyMySQL系统产生的。

 

posted @ 2019-09-05 23:06  十五小哥哥  阅读(469)  评论(0编辑  收藏  举报