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

  • 相关阅读:
    linux命令:ls
    linux 进程线程拓展
    linux命令:find
    电动车充电器原理及带电路图维修
    kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)
    Linux内核最新的连续内存分配器(CMA)——避免预留大块内存【转】
    alloc_page分配内存空间--Linux内存管理(十七)
    伙伴系统之避免碎片--Linux内存管理(十六)
    伙伴系统之伙伴系统概述--Linux内存管理(十五)
    USB初学(一)---USB-HID的初步认识【转】
  • 原文地址:https://www.cnblogs.com/wanghj-15/p/11470448.html
Copyright © 2011-2022 走看看