zoukankan      html  css  js  c++  java
  • mysql优化问题汇总

    sql优化--》分区--》分表--》垂直分库--》水平分库--》读写分离

    分区 

    关于分区的博客推荐这个:https://blog.csdn.net/youzhouliu/article/details/52757043

    1查看是否支持分区?一般现在的mysql版本都支持。

    进入到mysql命令行。mysql -u root -p 
    
    show plugins    //查看是否支持分区,最后会出现一个 partition  这个行 表示支持    
    也可以 show variables like '%partition%';

    2查看这个数据库所有的表的状态,是否是分区表

    show table status 

    3查看表具有哪几个分区、分区的方法、分区中数据的记录数等信息

    select 
      partition_name part,  
      partition_expression expr,  
      partition_description descr,  
      table_rows  
    from information_schema.partitions  where 
      table_schema = schema()  
      and table_name='test';  
    
    
    select schema()   //查看在那个数据库

    p0 id 6 1
    p1 id 11 0
    p2 id 16 1
    p3 id MAXVALUE 1

    4显示扫描哪些分区,及他们是如何使用的

     explain partitions select语句

    5 如何分区

    注意:必须创建表是的时候才能创建分区,不能在已有的数据上对表进行分区,如果想在已有的表中创建分区,解决办法是创建一个新的表并设置好分区,然后再进行数据转移。注意;号。

    -----------------------------------创建range分区
    CREATE TABLE employees (
        id INT NOT NULL,
        fname VARCHAR(30),
        lname VARCHAR(30),
        hired DATE NOT NULL DEFAULT '1970-01-01',
        separated DATE NOT NULL DEFAULT '9999-12-31',
        job_code INT NOT NULL,
        store_id INT NOT NULL
    )
    PARTITION BY RANGE (store_id) (
        PARTITION p0 VALUES LESS THAN (6),
        PARTITION p1 VALUES LESS THAN (11),
        PARTITION p2 VALUES LESS THAN (16),
        PARTITION p3 VALUES LESS THAN MAXVALUE
    );
    
    -----------------------------------创建list分区
    CREATE TABLE emp (
      empno VARCHAR (20) NOT NULL,
      empname VARCHAR (20),
      deptno INT,
      birthdate date NOT NULL,
      salary INT
    ) PARTITION BY list (deptno)(
      PARTITION p1 VALUES IN (10),
      PARTITION p2 VALUES IN (20),
      PARTITION p3 VALUES IN (30)
    );
    以部门作为分区依据,每个部门做一分区。
    
    -----------------------------------创建HASH分区
    CREATE TABLE emp2 (
        empno VARCHAR (20),
        empname VARCHAR (20),
        deptno INT,
        birthdate date ,
        salary INT
    ) PARTITION BY HASH (deptno) PARTITIONS 3;
    
    
    -----------------------------------创建key分区
    CREATE TABLE emp (
      empno VARCHAR (20) NOT NULL,
      empname VARCHAR (20),
      deptno INT,
      birthdate date NOT NULL,
      salary INT
    ) PARTITION BY KEY (birthdate) PARTITIONS 4;

    垂直拆分

    将系统中不存在关联关系或者需要join的表可以放在不同的数据库不同的服务器中。

    按照业务垂直划分。比如:可以按照业务分为资金、会员、订单三个数据库。

    需要解决的问题:跨数据库的事务、join查询等问题。

    水平拆分

    例如,大部分的站点。数据都是和用户有关,那么可以根据用户,将数据按照用户水平拆分。

    按照规则划分,一般水平分库是在垂直分库之后的。比如每天处理的订单数量是海量的,可以按照一定的规则水平划分。需要解决的问题:数据路由、组装。

    推荐几篇博客,讲的很不错:

    https://www.cnblogs.com/jpfss/p/9176150.html#undefined

     

    https://www.cnblogs.com/bluebluesky/articles/6413255.html

  • 相关阅读:
    查看mysql版本的四种方法及常用命令
    newInstance和new的区别(good)
    Citrix 服务器虚拟化之六 Xenserver虚拟机创建与快照
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 前缀表达式
    Java实现 蓝桥杯 算法训练 前缀表达式
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/9295224.html
Copyright © 2011-2022 走看看