SQL优化

℡╲_俬逩灬. 提交于 2020-04-05 18:04:59

SQL优化

1.原因

需要SQL优化的原因有:

  一、SQL语句性能低下

  二、执行时间过长

  三、等待时间过长

  四、SQL语句欠佳(多数出现在连接查询时)

  五、索引失效

  六、服务器参数设置不合理(例如:缓冲区、线程数)

SQL:

  编写过程:

    select...dinstinct ...from...join...on...where...group by...having...order by...limit

  解析顺序:

    from...on...join...where...group by...having...select...dinstinct ...order by...limit

详细信息可参照:https://www.cnblogs.com/annsshadow/p/5037667.html

 

SQL优化,主要就是在优化索引

   索引作用:相当于书的目录

  索引:index 是帮助mysql高效获取数据的数据结构。索引是数据结构 组成(树:B+树,Hash树)

B+树数据结构图:

 

B树不光有上边的二叉树,也可以有三叉乃至多叉树:

B+三叉树图:

索引弊端:

索引的弊端:
            1.索引本身很大, 可以存放在内存/硬盘(通常为 硬盘)
            2.索引不是所有情况均适用: a.少量数据  b.频繁更新的字段   c.很少使用的字段
            3.索引会降低增删改的效率(增删改  查)

        优势:1提高查询效率(降低IO使用率)
              2.降低CPU使用率 (...order by age desc,因为 B树索引 本身就是一个 好排序的结构,因此在排序时  可以直接使用)

 索引
    分类:
        主键索引:  不能重复。id    不能是null
        唯一索引  :不能重复。id    可以是null
        单值索引  : 单列, age ;一个表可以多个单值索引,name。
        复合索引  :多个列构成的索引 (相当于 二级目录 :  z: zhao)  (name,age)   (a,b,c,d,...,n)
    创建索引:
        方式一:
        create 索引类型  索引名  on 表(字段)
        单值:
        create index   dept_index on  tb(dept);
        唯一:
        create unique index  name_index on tb(name) ;
        复合索引
        create index dept_name_index on tb(dept,name);

        方式二:alter table 表名 索引类型  索引名(字段)
        
        单值:
        alter table tb add index dept_index(dept) ;
        唯一:
        alter table tb add unique index name_index(name);
        复合索引
        alter table tb add index dept_name_index(dept,name);

        注意:如果一个字段是primary key,则改字段默认就是 主键索引    
    

        删除索引:
        drop index 索引名 on 表名 ;
        drop index name_index on tb ;

        查询索引:
        show index from 表名 ;
        show index from 表名 \G

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!