• 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系统产生的。

  • 相关阅读:
    Linux I/O调度
    集群心跳机制
    如何修改集群的公网信息(包括 VIP) (文档 ID 1674442.1)
    AVL树(平衡二叉树)
    二叉搜索树
    二叉树及树的遍历
    python实现基数排序
    python之迷宫BFS
    python之迷宫DFS
    python实现队列
  • 原文地址:https://www.cnblogs.com/wanghj-15/p/11470448.html
Copyright © 2020-2023  润新知