zoukankan      html  css  js  c++  java
  • Mysql优化

    数据库如何进行优化

      数据库设计规范(三大范式)
      添加索引(普通索引,唯一索引,全文索引等等)
      分库分表(垂直分割和水平分割)
      读写分离
      存储过程
      配置MySQL连接参数
      SQL语句优化
      清理碎片化
      mysql服务器优化

    数据库设计规范(三大范式)

      第一范式:保证每一个列的原子性,不可再分
      第二范式: 在满足第一范式基础之上,保证表中数据的唯一,每一个列都和主键相关,一张表只描述一件事情
      第三范式:在满足第二范式基础之上,保证表中每一个列都和主键直接相关,而不是间接相关
      在实际开发场景当中,根据业务需求来定,没有必要非得严格按照三大范式

    分库分表:mycat
      什么时候分库:垂直分割,专库专用
      分布式项目,每一个模块是一个工程,进行分库,一个数据库对应一个模块
      优点
        拆分之后业务更加清晰,拆分规则更加明确
        系统之间整合或者扩展更加方便
        数据维护简单
      缺点
        如果遇到关联,维护起来比较麻烦
        受各种业务限制
      什么时候分表:单张表数据量过大的情况下,进行水平分割,(取模算法)
      优点
        每一张表不存在大量的数据
        对应用透明
        按照合理的查新规则进行拆分,避免夸库
        提高了系统的负载能力
      缺点
        拆分规则不好确定
        对事务一致性难以解决
        分页不好做

    定位慢查询

    CREATE TABLE user0(
    id INT UNSIGNED PRIMARY KEY ,
    NAME VARCHAR(32) NOT NULL DEFAULT '',
    pwd  VARCHAR(32) NOT NULL DEFAULT '')
    ENGINE=MYISAM CHARSET utf8;
    
    CREATE TABLE user1(
    id INT UNSIGNED PRIMARY KEY ,
    NAME VARCHAR(32) NOT NULL DEFAULT '',
    pwd  VARCHAR(32) NOT NULL DEFAULT '')
    ENGINE=MYISAM CHARSET utf8;
    
    CREATE TABLE user2(
    id INT UNSIGNED PRIMARY KEY ,
    NAME VARCHAR(32) NOT NULL DEFAULT '',
    pwd  VARCHAR(32) NOT NULL DEFAULT '')
    ENGINE=MYISAM CHARSET utf8;
    CREATE TABLE UUID(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT)ENGINE=MYISAM CHARSET utf8;
    
    
    
    
    
    
    
    SHOW VARIABLES LIKE 'long_query_time';
    
    
    SHOW STATUS LIKE 'slow_queries';
    
    
    SET long_query_time=1
    
    
    /*部门表*/
    CREATE TABLE dept( 
    deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0,  /*编号*/
    dname VARCHAR(20)  NOT NULL  DEFAULT "", /*名称*/
    loc VARCHAR(13) NOT NULL DEFAULT "" /*地点*/
    ) ENGINE=MYISAM DEFAULT CHARSET=utf8 ;
    /*员工表*/
    CREATE TABLE emp
    (empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/
    ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/
    job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
    mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/
    hiredate DATE NOT NULL,/*入职时间*/
    sal DECIMAL(7,2)  NOT NULL,/*薪水*/
    comm DECIMAL(7,2) NOT NULL,/*红利*/
    deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
    )ENGINE=MYISAM DEFAULT CHARSET=utf8 ;
    
    
    
    
    /*薪水*/
    CREATE TABLE salgrade
    (
    grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
    losal DECIMAL(17,2)  NOT NULL,
    hisal DECIMAL(17,2)  NOT NULL
    )ENGINE=MYISAM DEFAULT CHARSET=utf8;
    
    
    
    DELIMITER $$
    CREATE FUNCTION rand_string(n INT) 
    RETURNS VARCHAR(255) #该函数会返回一个字符串
    BEGIN 
    #chars_str定义一个变量 chars_str,类型是 varchar(100),默认值'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
     DECLARE chars_str VARCHAR(100) DEFAULT
       'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
     DECLARE return_str VARCHAR(255) DEFAULT '';
     DECLARE i INT DEFAULT 0;
     WHILE i < n DO 
       SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
       SET i = i + 1;
       END WHILE;
      RETURN return_str;
      END $$
    
    
    
    
    DELIMITER $$
    CREATE FUNCTION rand_num()
    RETURNS INT(5)
    BEGIN
     DECLARE i INT DEFAULT 0;
     SET i =FLOOR(10+RAND()*500);
     RETURN i;
    END $$
    
    
    DELIMITER $$
    CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
    BEGIN
    DECLARE i INT DEFAULT 0; 
    #set autocommit =0 把autocommit设置成0
     SET autocommit = 0;  
     REPEAT
     SET i = i + 1;
     INSERT INTO emp VALUES ((START+i) ,rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
     UNTIL i = max_num
     END REPEAT;
       COMMIT;
    END $$
    
    CALL insert_emp (101002,40000000);  
    
    SELECT * FROM emp
  • 相关阅读:
    【刷题】LeetCode刷刷刷 — 2021-05-31(2)
    【刷题】LeetCode刷刷刷 — 2021-05-31(1)
    【刷题】LeetCode刷刷刷 — 2021-05-30(2)
    适配器模式
    跨端开发框架各方评价【整合】+思索
    uni-app运行到小程序报错onStreamRead
    序列化
    tkinter---GUI
    tkinter--抽奖
    6位数(字母和数字)验证码
  • 原文地址:https://www.cnblogs.com/whtt/p/12331947.html
Copyright © 2011-2022 走看看