Mysql高级进阶(sql优化)

一:Mysql高级有哪些东西?

1、mysql的架构

架构这里我们主要说的是引擎:

看你的mysql现在已提供什么存储引擎:

#看你的mysql当前默认的存储引擎:

show variables like %storage_engine%;

各个存储引擎的介绍:

1、InnoDB存储引擎

InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。行级锁,适合高并发情况

2、MyISAM存储引擎

MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁(myisam改表时会将整个表全锁住),有一个毫无疑问的缺陷就是崩溃后无法安全恢复。

3、Archive引擎

Archive存储引擎只支持INSERT和SELECT操作,在MySQL5.1之前不支持索引。

Archive表适合日志和数据采集类应用。适合低访问量大数据等情况。

根据英文的测试结论来看,Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。

4、Blackhole引擎

Blackhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存。但服务器会记录Blackhole表的日志,所以可以用于复制数据到备库,或者简单地记录到日志。但这种应用方式会碰到很多问题,因此并不推荐。

5、CSV引擎

CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。

CSV引擎可以作为一种数据交换的机制,非常有用。

CSV存储的数据直接可以在操作系统里,用文本编辑器,或者excel读取。

6、Memory引擎

如果需要快速地访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用Memory表是非常有用。Memory表至少比MyISAM表要快一个数量级。(使用专业的内存数据库更快,如redis)

7、Federated引擎

Federated引擎是访问其他MySQL服务器的一个代理,尽管该引擎看起来提供了一种很好的跨服务器的灵活性,但也经常带来问题,因此默认是禁用的。

MyISAM 与 InnoDB的比较

2、索引优化分析

    性能下降SQL慢执行时间长等待时间长:
  1. 查询数据太多,关联太多的表,太多的jion
  2. 没有利用索引(单值,复合)
  3. 服务器调优及各个参数设置(缓冲,线程数等)

SQL的执行顺序:

手写顺序

机读顺序(可以看出机读顺序是从from开始的)

总结

七种jion

对应的SQL

1 A、B两表共有
 select * from t_emp a inner join t_dept b on a.deptId = b.id;
2 A、B两表共有+A的独有
 select * from t_emp a left join t_dept b on a.deptId = b.id;
3 A、B两表共有+B的独有
 select * from t_emp a right join t_dept b on a.deptId = b.id;
4 A的独有
select * from t_emp a left join t_dept b on a.deptId = b.id where b.id is null; 
5 B的独有
 select * from t_emp a right join t_dept b on a.deptId = b.id where a.deptId is null;  
6 AB全有
#MySQL Full Join的实现 因为MySQL不支持FULL JOIN,下面是替代方法
 #left join + union(可去除重复数据)+ right join
SELECT * FROM t_emp A LEFT JOIN t_dept B ON A.deptId = B.id
UNION
SELECT * FROM t_emp A RIGHT JOIN t_dept B ON A.deptId = B.id
 这里因为要联合的缘故,不能考虑到小表驱动大表的情况。只能用right join。要保证查询出来的数字要一致。
7 A的独有+B的独有
        * FROM t_emp A LEFT JOIN t_dept B ON A.deptId = B.id WHERE B.`id` IS NULL
UNION
SELECT * FROM t_emp A RIGHT JOIN t_dept B ON A.deptId = B.id WHERE A.`deptId` IS NULL;

如何查看我们的sql性能:

explain + sql语句

explain具体的参数看

3、查询截取分析

4、mysql锁机制

5、主从复制

经验分享 程序员 微信小程序 职场和发展