认识索引

为什么优化sql

原因:性能低、执行时间长、等待时间长 、sql语句欠佳(链接查询)、索引失败、服务器参数设置不合理(缓冲、线程数)

a.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

b.sql优化,主要就是优化索引

索引:相当于书的目录
索引:index 是帮助mysql高效获取数据的数据结构。索引是数据结构(树:B+树、Hash树等),mysql默认使用就是B树。

在这里插入图片描述

索引的弊端:

  1. 索引本身很大,可以存放在内存/硬盘(通常硬盘)
  2. 索引不是所有情况都适用(以下情况不建议使用)
    a.数据量小的情况下
    b.频繁更新字段
    c.很少使用的情况
  3. 添加索引会降低增、删、改的效率(不但表数据要变,索引数据也会改变)
    优势:
    a.提高查询的效率(降低了IO的使用率)
    b.降低CPU使用率(因为本身B树索引就是排好序的结构,因此在排序时可以在直接使用)
    在这里插入图片描述

索引分类:

主键索引:不能重复,一般用于id列 不能为null
唯一索引:不能重复,一般用于id列 可以为null
单支索引:单列,一个表可以有多个单支索引
复合索引:多个列组成的索引(相当于二级目录)

创建索引

方式一:
语法:create 索引类型 索引名 on 表名(字段)
单值:create index name_index on stu(name)
唯一:create unique index id_index on stu(id)
复合:create index name_age_index on stu(name,age)
方式二:
语法:alter table 表名 add 索引类型 索引名 (字段)
单值:alter table stu add index name_index(name)
唯一:alter table stu add unique index id_index(id)
复合:alter table stu add index name_age_index(name,age)

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

删除索引

drop index 索引名 on 表名;
drop index name_index on stu;

查询索引

show index from 表名 ;
show index from 表名 \G或\g;
官网优化方法:https://dev.mysql.com/doc/refman/5.5/en/optimization.html

猜你喜欢

转载自blog.csdn.net/weixin_43681813/article/details/88665114