1.mysql分层
- 连接层:提供与客户端连接的服务
- 服务层:1.提供各种用户使用接口,2提供sql优化器(写的语句和执行可能不一致)
- 引擎层:提供了各种存储数据的方式
- InnoDB :事物优先,(适合高并发操作 使用行锁)
- MyISAM:性能优先(表锁)
- 存储层:存储数据
查询数据库支持哪些引擎:show engines;
2.SQL优化简述
2.1原因:性能低、执行时间长,等待时间长,sql语句欠佳(连接查询),索引失效、服务器参数设置不合理(缓冲、线程数)
2.2sql优化:主要就是优化索引
- 索引相当于书的目录
- index是帮助mysql高效获取数据的数据结构。索引是数据结构(树:b树、二叉树。。)
- 索引的弊端:
- 索引本身很大,可以放到内存/硬盘中
- 索引不是所有的情况都适用:a.少量数据 b.频繁的更新的字段 c.很少使用的字段
- 索引会降低增删改的效率(因为更改以后还需要去更改索引)
- 优势
- 提高查询效率(降低了io的使用率)
- 降低cpu的使用率(因为已经做好了排序等)
3.索引
3.1分类
单值索引:单列,一个表可以有多个单值索引
唯一索引:不能重复 id(和主键索引的区别 主键不能为null)
复合索引:多个列构成的索引(相当于 一级目录二级目录。。。)
3.2创建索引
方式一:
create 索引类型 索引名 on 表名(字段)
例:
单值:create index name_index on user(name);
唯一索引:create unique index id_index on user(id)
复合索引:create index name_id_index on user(name,id)
方式二:
**alter table 表名 add 索引类型 索引名(字段) **
例:
单值:alter table user add index name_index(name);
唯一索引:alter table user add unique index id_index(id)
复合索引:alter table user add index name_id_index(name,id)
3.3删除索引
drop index 索引名 on 表名
3.4查询索引
show index from 表名;