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

  • 相关阅读:
    android 图片特效处理之模糊效果
    android 图片特效处理之怀旧效果
    android图像处理系列之六-- 给图片添加边框(下)-图片叠加
    android图像处理系列之五-- 给图片添加边框(中)
    android图像处理系列之四-- 给图片添加边框(上)
    android图像处理系列之三-- 图片色调饱和度、色相、亮度处理
    Android学习笔记进阶18 之画图并保存图片到本地
    Android学习笔记进阶19 之给图片加边框
    HDU3572_Task Schedule(网络流最大流)
    再淡spring jdbc 连接池断开重连设置
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/9295224.html
Copyright © 2011-2022 走看看