PHP面试必备知识-Mysq优化(三)

97 阅读2分钟
六、Mysql优化——分表


水平分表:


定义
当一个表很大时我们创建索引后,查询速度还是很慢, 把一个巨大的表安装某个标准分割成小表,这样可以提供查询的速度。(对用户id求余)


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/4aa29cba335648d8b5a9e8a72ed4a86f/wps14.tmp.jpeg

垂直分表:


目的:减少表字段长度



七、分区的算法



1、 分区


分区实在表定义的时候声明的



2、分区语法


create table 表名()engine=myisam charset=utf8 partition by 分区算法(字段) 分区选项;



3、分区算法种类


①、
key分区。



C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/f22f66ede256459cb3d21e352be5e24a/clipboard.png

②、
hash分区


和key方式一样,通过key方式取余。


③、
list分区


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/e8f0c6ff300346fa86fd8c86217c280b/clipboard.png

④、
range分区



C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/7e4a13afbe87448aa6b87a161de74f1d/clipboard.png

✔分区字段必须是 主键



4、分区管理


①、取余管理(key和hash)


删除分区,数据不会丢失;


增加分区数量:
alter table 表名 add partition partitions N


减少分区数量:
alter table 表名 coalesce partition N


②、条件策略(list和range)


删除分区,数据会丢失;


删除分区:
alter table
表名
drop partition
分区名
;


添加分区:
alter table
表名
add partition(partition
分区名
values
)



八、mysql中的执行计划



定义:
MySQL提供了EXPLAIN语法用来进行查询分析SQL语句涉及多少行、使用哪些索引、运行时间。


语法
:explain 待分析SQL语句(如果待分析SQL语句后面写\G不要加分号)


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/1ae62f327f2941a4bbc33a37cac9ee30/clipboard.png

分析查看类型:


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/0f2dcd19f2d143e2a456aac44c72bb3e/wps1fc4.tmp.jpeg


九、如何查询需要优化的SQL语句——慢查询日志


1、查看慢查询日志是否开启;


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/aa63d8b8221643b4975300ac1e77cf0c/clipboard.png

2、手动开启慢查询日志:set global slow_query_log = 1;


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/779fbd95119241f98c61600c05869165/clipboard.png

3、设置查询的临界时间(查询超过指定时间后记录)


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/b058f47bff174866a0504dcf80edca8c/clipboard.png


C:/Users/wendy/AppData/Local/YNote/data/m18956210239@163.com/d00a1940101e47fea6ea6ce20fb5476d/clipboard.png


十:面试问题



1、问现在网站打开比较慢你如何优化?


1)通过CDN加速静态资源访问


2)开启expires和gzip压缩


3)降低MySQL压力(主从复制、读写分离)


4)Nginx实现负载均衡和动静分离


5)开启慢查询日志,检查是否存在问题SQL语句




Mysql优化就总结这么多,面试前可以准备准备哦



学习中遇到问题,欢迎提问交流