1.为什么要有索引
    因为我们在平时开发中,可能会遇到系统性能下降,sql慢,执行时间长,等待时间长的时候
    而导致这个的原因有:1.查询语句写的栏
    2.索引失效
    1.单值索引
    2.复合索引
    3.关联查询太多join(设计缺陷或不得已的需求)
    4.服务器调优及各个参数设置(缓冲,线程数等)

    2.常见通用的join查询
    1.sql执行顺序
    手写

    机读
    image.png

    总结:
    2.join图

    1. 共七种,不在复习 因为简单<br />3.索引入门<br />1.什么是索引<br />mysql官方对索引的定义是,索引是帮助Mysql高效获取数据的数据结构<br />总结:索引是一种数据结构,索引是一种排好序的快速查找数据结构。<br />2.索引的目的<br />索引的目的是为了提高查找效率,类似于字典<br />帮助理解:<br />比如我们在查找一条sql 的时候,根据名字查,mysql默认是所属数据是混乱的,不是有序的,因此我们可以用索引的方式,建一个以name排序的结构,我们在查询的时候,就不需要莫无目的的查找,可以指定通过参数值定位到指定的数据。<br />索引的优点<br />索引可以提高检索效率,降低数据库的io成本<br />通过索引对数据进行排序,降低数据排序的成本,降低了cpu的消耗<br />索引的缺点<br />索引也会占用磁盘空间,如果建立大量的索引,会导致更新速度变慢,因为,每次在更新的时候也需要更新索引的指向。<br />mysql的索引分类:<br />单值索引:即一个索引只包含单个字段,但是一张表可以有多个字段<br />唯一索引:索引列的值必须唯一,但允许有空值<br />复合索引:即一个索引包含多个列<br />3.基本语法:<br />创建:<br />create index indexName on user (columnName(name));<br />alert user add index [indexName] on (columnName(name))<br />删除:<br />drop index[indexName] on user;<br />查看:<br />show index from user\g<br />alter table的使用<br />有四种方式来添加索引:<br />1.alter table table_name add primary key(column_list):添加一个主键,这意味着这个索引必须是唯一的,且不能为null。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22082810/1629160121402-b5360145-d277-457f-83c2-75c7f3b3db82.png#clientId=u969cc59b-dbfa-4&from=paste&height=193&id=u017e80fe&margin=%5Bobject%20Object%5D&name=image.png&originHeight=193&originWidth=1446&originalType=binary&ratio=1&size=182864&status=done&style=none&taskId=u2accc166-cf70-40b9-af9c-b865e1272b1&width=1446)<br />4.mysql索引结构:<br />1.BTree索引<br />2.Hash索引<br />3.full-text全文索引<br />4.R-Tree索引<br />5.那些情况需要建索引<br />1.主键自动建立唯一索引<br />2.频繁作为查询的字段应该建立索引<br />3.查询中与其他表关联的字段,外键关系建立索引<br />4.频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引<br />5.where条件里用不到的字段不适合建立索引<br />6.单键/组合索引的选择问题,who?(在高并发情况下倾向创建组合索引)<br />7.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度<br />8.查询中统计或者分组字段。<br />6.那些情况不需要建立索引<br />1.表记录太少<br />2.经常增删改的表<br />3.如果某个数据列包含太多重复的内容,建立索引就没有太多实际效果<br />7.mysql的性能调优<br />1.mysql Query Optimizer:mysql自带的sql优化器<br />2.mysql的常见瓶颈<br />1.cpu:cpu在饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候<br />2.IO:磁盘IO瓶颈发生在装入数据远远大于内存容量的时候<br />3.服务器硬件的性能瓶颈:top,free,iostat,和vmstat来查看系统的性能状态<br />3EXplain<br />1.是什么?<br />使用EXPLAIN关键字可以模拟优化器执行sql查询语句,从而知道Mysql是如何处理你的sql语句的<br />分析你的查询语句,或是表结构的性能瓶颈<br />2.怎么用?<br />explain + sql 语句 程序员的基本美德<br />3.能干嘛<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22082810/1629162304397-e618fe91-5c4a-4fc5-83fa-1945fe51ed1b.png#clientId=u969cc59b-dbfa-4&from=paste&height=452&id=u4f9ab0a4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=452&originWidth=815&originalType=binary&ratio=1&size=114222&status=done&style=none&taskId=u6a0f27a7-ee73-45f9-bbd9-9c3e0b6c20a&width=815)<br />4.explain中包含的字段<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22082810/1629162601813-56eae1f2-86d1-4bff-9db7-c6f75b44c7ff.png#clientId=u969cc59b-dbfa-4&from=paste&height=132&id=u5c76ecd6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=132&originWidth=1499&originalType=binary&ratio=1&size=81828&status=done&style=none&taskId=u0be30274-006a-4e98-b534-9675192b613&width=1499)<br />id: