关系型数据库---MYSQL---优化

1、为什么要进行SQL优化?

    1.1  查询性能低

    1.2  执行时间过长

    1.3  等待时间过长

    1.4  SQL写的太差(尤其是多表关联查询)

    1.5  索引失效

    1.6  服务器参数(缓存、线程数)设置不合理

    1.7  项目需求不合理

    ......

    程序员关注的主要是SQL索引

2、MySQL执行过程

扫描二维码关注公众号,回复: 7498065 查看本文章

    2.1  前言:

          MySQL服务器在接收到客户端发来的SQL语句,是不能够马上执行该SQL语句;

          该SQL需要进行一系列复杂的过程,最终转变为二进制的机器码,才能被执行;

    2.2  SQL执行流程

        

        

    2.3  SQL执行顺序

        

     2.4  SQL优化的目标

          主要是对索引的有效使用

3、数据库索引

    3.1

    3.2  案例

      

      索引的目的减少磁盘的IO次数,从而提升性能

          【扩展】:

              一个3层的B+树的数据结构,可以容纳上百万条数据,查询某个数据,只需要3次IO,效率极高;

    3.3  索引的利弊

          

              减少IO次数,提高查询效率;

              降低CPU的使用率;

          

              占用磁盘的存储空间(索引本身也是文件);

              不适用索引的情况:

                  数据量小的表;

                  频繁变动的字段;

                  不经常查询的字段;

                  对增删改操作效率降低(需要重新维护索引);

              【备注】:

                  查询优化器  会对  使用索引、不使用索引  进行比对,如果发现不使用效率更高,则不会使用索引(索引的使用与否  由  查询优化器  决定);

    3.4  索引的分类

          同一张表  可以有  多个不同的索引

          3.4.1  主键索引

          3.4.2  单列索引

                单独对表中的某个列做索引(根据需求);

          3.4.3  唯一索引

                该列数据中没有重复数据,都是唯一的;

          3.4.4  复合索引

                项目中使用最多的;

                实际需求中  往往是按照多个条件进行查询,而mysql在查询时只会选择其中一个做索引(最优的  执行计划

                复合索引的规则比较严格;

     3.5  SQL执行计划

          3.5.1  前言

                SQL语句执行之前SQL优化器  会对   SQL语句  进行优化和调整,最后生成最优的SQL执行计划

                最终执行的SQL不一定是我们当初编写的SQL;

          3.5.2  查看SQL执行计划

                explain SQL语句;

          3.5.3  执行计划详解

                

                idSQL执行的序列号

                    如果有多个,数字大的优先执行;如果相同,依次执行;

                select_type查询的类型

                    

                table数据来自哪张表;

                type:显示   连接使用哪种类别有无使用索引(explain工具分析最重要的);

                    

                    

                possible_keys可以使用的索引

                 key:SQL执行时真正用到的索引

                 key_lenmysql决定使用的键长度

                    长度越短越好;

                ref:参数类型;

                rows:要达到结果,必须搜索多少行数据;

                Extra:mysql解决问题的详细信息(关键参考项之一);

                     

猜你喜欢

转载自www.cnblogs.com/anpeiyong/p/11698150.html