• mysql优化之sql优化原则


      以下内容来自小马哥视频学习笔记。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

    原则一:选择需要优化的sql

      1 选择更需要优化的sql:高并发 低消耗的sql

      实例:A语句 1小时请求1W次,1次10个IO;B语句 1小时请求10次,1次1W个IO;

      1)从单位时间产生的IO总数来说,相同的;

      2)针对一个SQL,如果我能把10个IO变成7个IO,一小时减少3W个IO; 针对第二个SQL,如果能把1W个IO变成7K个IO,一小时减少3W个IO;

      3)从优化难度上讲,1W->7K难的多;

      4)从整体性能上来说,第一个SQL的优化能够极大的提升系统整体的性能;第二个SQL慢一点,无非也就是10个连接查询慢一点;

      2 定位性能瓶颈:SQL运行较慢有两个影响原因,IO和CPU,明确性能瓶颈所在,明确优化目标。

    原则二:使用explain和profile指令

      1 首先明确你需要的执行计划,再使用Explain检查;

      2 任何SQL的优化,都从Explain语句开始;Explain语句能够得到数据库执行该SQL选择的执行计划;

      3 使用profile明确SQL的问题和优化的结果;

    原则三:小结果集驱动大结果集

      以join为例:

      1 JOIN的原理: 在mysql中使用Nested Loop Join来实现join; A JOIN B:通过A表的结果集作为循环基础,一条一条的通过结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果;

        select A.a,B.b from A join B on A.xx=B.yy where B.zz=0;

        执行流程:for(id in A){

               select * from B where B.xx=id;

             }

          再从中间结果集中用B.zz=0去过滤数据。

      2 JOIN的优化原则:  1)尽可能减少Join 语句中的循环总次数,用小结果集驱动大结果集;

                2)优先优化Nested Loop 的内层循环;

                3)保证Join 语句中被驱动表上Join 条件字段已经被索引;

                4)扩大join buffer的大小;

    原则四:在索引中完成排序

    原则五:使用最少的column

      1 可以减少网络传输量

      2 MySQL排序原理是将所有column数据取出,在排序缓存区排序,再返回结果,如果column多,数据量大,排序区容量不够时,

      就会先用排序所用column进行排序,再去取数据,再返回,多次请求数据库。

    原则六:使用最有效的过滤条件

      1 过多的WHERE条件不一定能够提高访问性能;

      2 一定要让where条件使用自己预期的执行计划;

    原则七:避免复杂的JOIN和子查询 

      1 复杂的JOIN和子查询,需要锁定过多的资源,MYSQL在大量并发情况下处理锁定性能下降较快;

      2 不要过多依赖SQL的功能,把复杂的SQL拆分为简单的SQL;

      3 MySQL子查询性能较低,应尽量避免使用;

  • 相关阅读:
    Postgresql 常用操作
    捡回reset的未提交修改
    Excel 97-2003版本内部结构与查看方法
    【WPF】EntityframeworkCore Update注意事项
    Mac版StarUML破解方法
    Excel2016 自定义RTDServer添加方法
    apache中开启SSL设置方法
    软件开发中的常用工具
    编程风格统一配置EditorConfig
    Windows10简单启动项目添加方法
  • 原文地址:https://www.cnblogs.com/hungryforknowedge/p/10027124.html
Copyright © 2020-2023  润新知