zoukankan      html  css  js  c++  java
  • MySQL单机优化---SQL优化

    SQL优化变多次维护为一次维护

      Sql优化分为:DDL、DML、DQL

      一、DDL优化

     

        1 、通过禁用索引来提供导入数据性能 。 这个操作主要针对有数据库的表,追加数据

     

          //去除键

     

          alter table test3 DISABLE keys;

     

          //批量插入数据

     

          insert into test3 select * from test;

     

          //恢复键

     

          alter table test3 ENABLE keys;

     

        变多次索引维护为一次索引维护

     

     

           2、 关闭唯一校验

     

          set unique_checks=0  关闭

     

          //批量插入数据

     

          insert into test3 select * from test;

     

          set unique_checks=1  开启

     

        变多次唯一校验为一次唯一校验

     

     

            3、修改事务提交方式(导入)

     

          set autocommit=0   关闭# false

     

          //批量插入

     

          set autocommit=1   开启 true

     

        变多次事务提交为一次事务提交

     

      二、DML优化

     

        insert into test (name) values(2);

     

        insert into test values(1,3);

     

        insert into test values(1,4);

     

        //合并多条为一条 mybatis的批量操作:

     

        insert into test values(1,2),(1,3),(1,4)

     

        变多次事务提交为一次事务提交

     

      三、DQL优化

     

        (1)   1 order by优化

     

          1、多用索引排序

     

          2、普通结果排序(非索引排序)Filesort

     

          索引本身就是排序的,所以多使用索引

     

        (2)    group by优化

     

          查询某个时间的付款总和

     

          explain

     

          select DATE_FORMAT(payment_date,'%Y-%m'),sum(amount) from payment GROUP BY DATE_FORMAT(payment_date,'%Y-%m') ;

     

          explain

     

          select DATE_FORMAT(payment_date,'%Y-%m'),sum(amount) from payment GROUP BY DATE_FORMAT(payment_date,'%Y-%m') order by null;

     

          group by是使用order by null,取消默认排序

     

     

        (3) subQuery嵌套优化

     

           在客户列表找到不在支付列表的客户

     

           #在客户列表找到不在“支付列表”的客户 , 查询没买过东西的客户

     

           explain

     

           select * from customer where customer_id not in (select DISTINCT customer_id from payment);

     

           explain

     

              select * from customer c left join payment p on(c.customer_id=p.customer_id) where p.customer_id is null   -- 这种是基于“索引”外链

     

     

        (4) or优化

     

          在两个独立索引上使用or的性能优于

     

          1or两边都是用索引字段做判断,性能好!!

     

          2or两边,有一边不用,性能差

     

          3、 如果employee表的nameemail这两列是一个复合索引,但是如果是 :name='A' OR email='B' 这种方式,不会用到索引!

     

     

        (5)   limit优化

     

          select film_id,description from film order by title limit 50,5;

     

          select a.film_id,a.description from filqm a inner join (select film_id from film order by title limit 50,5)b on a.film_id=b.film_id

     

      30sql语句优化:https://www.cnblogs.com/Little-Li/p/8031295.html

     

  • 相关阅读:
    vue简单总结
    浅拷贝 与递归实现深拷贝封装
    利用mock生成随机的东西
    你不知道的JavaScript--面向对象高级程序设计
    超实用的JavaScript代码段 --倒计时效果
    超实用的JavaScript代码段 Item4 --发送短信验证码
    WEB前端性能优化:HTML,CSS,JS和服务器端优化
    超实用的JavaScript代码段 Item8 -- js对象的(深)拷贝
    web开发必须知道的javascripat工具
    加快页面的运行速度
  • 原文地址:https://www.cnblogs.com/wanghj-15/p/11470506.html
Copyright © 2011-2022 走看看