zoukankan      html  css  js  c++  java
  • 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系统产生的。

  • 相关阅读:
    洛谷 P2678 跳石头
    洛谷 P1145 约瑟夫
    LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例
    洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths
    网络编程 --- TCP
    进程
    并发编程
    网络编程 --- UDP
    网络编程
    面向对象编程 --- 反射
  • 原文地址:https://www.cnblogs.com/wanghj-15/p/11470448.html
Copyright © 2011-2022 走看看