立即学习:https://edu.youkuaiyun.com/course/play/25283/297142?utm_source=blogtoedu
SQL优化:
原因:性能低、执行时间太长、 等待时间太长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲、线程数)
a.SQL:
编写过程:
select ..from .. join ..on .. where .. group by .. having ..order by ..limit...
解析过程:
from .. on .. join .. where ..group by .. having .. select ..order by limit ..
b.SQL优化,主要就是优化索引
索引:相当于书的目录
索引:index 是帮助MYSQL 高效获取数据的数据结构,索引是数据结构(树:B树(mysql默认 )、Hash树...)
B树:
小的放左边
大的放右边
索引弊端:
1.索引本身很大,可以存放在内存、硬盘(通常为硬盘)
2.索引不是所有情况均适用:a.少量数据 b.频繁更新的字段 c.很少使用的字段
3.索引会降低增删改的效率(增删改 查)
优势:1.提高查询效率(降低了IO使用率)
2.降低CPU使用率()
3层B树可以存放上百万条数据
Btree:有很多类型,一般都是指B+,数据全部存放在叶节点中
B+树种查询任意的数据次数:n次(B+树的高度)
4.索引
分类:
单 值索引:单列 ,age ; 一个表可以多个单值索引 ,name。
唯一索引:不能重复 。id
复合索引:多个列构成的索引(相当于 二级目录; z: zhao )(name ,age)(a,b,c,d..多列也可以)
desc tb(表名);
创建索引:
方式一:
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 add unique index name_index(name)
复合:
alter table add index dept_name_index(dept,name)
注意:如果一个字段是primary key ,则该字段默认就是 主键索引
删除索引:
drop index 索引名 on 表名
查询索引:
show index from 表名
5.SQl性能问题
a.分析SQL的执行计划 :explain,可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的状况;
b.MySQL查询优化其会干扰我们的优化
查询执行计划:explain + SQL 语句
explain select * from tb;
id: 编号
select_type:查询类型
table:表
type:类型
possible keys:预测用到的索引
key:实际使用的索引
key_len:实际使用索引的长度
ref:表之间的引用
rows:通过索引查询到的数据量
Extra:额外的信息