MySQL四层分层:(自上往下执行)
连接层:提供预客户端连接的服务。
服务层: 1.提供各种用户使用的接口
2.提供各种sql优化器(mysql如果发现你自己的sql写的太烂,会自动帮你优化)
引擎层: INNODB:事务优先 ( 适合高并发操作,使用的是行锁)
MYISAM: 性能有限 (使用的是表锁)
存储层: 存储数据
查询数据库的引擎: SHOW VARIABLES LIKE '%storage_engine%'
查询数据库支持的引擎 : SHOW engines
为什么要SQL优化原因:
性能低,执行事件太长,等待时间太长,sql语句欠佳(连接查询),索引失效,服务器参数设置不合理
一般SQL编写过程
select ... distinct ... from ... join on ... where ... group by ... having ... order
SQL的解析过程
from ... on ... join ... where ... group by ... having ... select ... distinct ... order
sql如何进行优化,主要是索引的 优化
索引: 相当于书的目录(排好序,加快速度)
索引: index是帮助mysql高效获取数据的数据结构。索引是数据结构(b+)
索引的弊端:
1.索引本身很大,可以存放内存/硬盘
2.索引不是所有情况都使用 (少量数据,频繁更新的字段,很少使用的字段,一般不使用索引)
3.索引会降低增删改的效率
索引分类:
1.主键索引:不能重复,id 不能为null
2.唯一索引:不能重复,id 可以是null
3.单键索引 ,age :一个表可以多个单键索引
4.复合索引:多个列构成的索引(相当于 二级目录:)不一定要两个都要命中
创建索引
1.单键索引 create index bobo on emp(name)
2.唯一索引 create unique index bobo on emp(name)
3.复合索引 create index bobo on emp(name,age)
修改索引
a。单键索引 alter table emp add index bobo(name)
b。唯一索引 alter table emp add unique index bobo(name)
c。复合索引 alter table emp add index bobo(name,age)
删除索引:
drop index bobo on emp
查询索引:
show index from emp
事务只对DML有效,对DDL无效,故删除索引无需commit
SQL性能问题
1.分析SQL的执行计划 explain可以模拟sql执行优化器,从而让开发人员可以知道自己编写sql的状况
2.MYSQL查询优化会干扰我们的优化