前言:
回想当初刚投入工作时,想的是努力工作,早日成为一个老司机,如今也已经工作一年有余,现在的工作做的倒是顺风顺水,然而想想自己的成长,却觉得自己的技术成长极少,甚至之前熟悉的技术,也因为工作中极少使用而被遗忘,细思极恐。。。所以痛下决心,不能再如此安逸下去了。。。于是决定在工作之余,学习知识,提高自己。
本篇博客是我看了《MySQL5.6从零开始学》这本书之后,总结了该书中所提到的一些关于MySQL优化相关的知识。
概要:
MySQL优化,大的层面分为三个:优化查询,优化数据库结构,优化MySQL服务器。本文只讲述三个大层面下的各个优化方法,至于每种优化方法的细节不做具体描述。主要帮助自己整理思路,也可作为一个学习MySQL优化的提纲。
一,优化查询
(1)分析查询语句
要想优化一条查询语句,我们首先要分析这个查询语句,MySQL使用 EXPLAIN 和 DESCRIBE关键字分析查询语句。其具体使用语法,和分析参数解析在此不再详述。
(2)使用索引查询
使用索引可以增加查询速度,这一点毋庸置疑,单单对于查询来说增益非常明显。但是创建了索引相应的会减慢插入,删除的速度。大量的索引文件也会增加数据库的体积。所以有利有弊。如何创建索引,以及应该何时创建索引,使用索引的利弊,这些都是非常有必要研究的,在此不再详述。
(3)优化子查询
这里只有一句话:使用连接查询代替子查询。至于为什么建议使用连接查询,而不建议使用子查询,以及如何将连接查询替换为子查询,这些具体细节值得深究,在此不再详述了,我会在下一篇博客中总结一下。
二,优化数据库结构
(1)将字段很多的表分解成多个表。
这个嘛一看就懂了啊。如果一个表中的字段超过了50个,那真的是要吐的,可以通过创建父子表,关联表来细化拆分。
(2)增加中间表
这个好处也是很明显的,使用中间表进行关联,主要用于解决多对多的关系,建议在中间表中也应该创建一个自增的id作为主键。
(3)增加冗余字段
适度的增加冗余字段能够提升查询速度,简化操作,因为不用每次都使用联接查询,获取属性。但是使用冗余字段违反了数据库第三范式的设计原则,需要根据业务设计冗余字段。
(4)优化插入记录的速度
正如上面所说,创建索引提升了查询速度,却减慢插入的速度,所以增加插入速度一条重要的操作就是,禁用索引(插入前禁用,插入后在开启);另外还有禁用唯一性检查,禁用外键检查,禁止自动提交,使用批量插入,尽量使用LOAD DATA INFILE 语句做批量插入。至于这些操作的具体实现在此不再详述。
(5)分析表,检查表,优化表
MySQL提供了分析表,检查表,优化表的语句,分析表主要是分析关键字的分布;检查表主要是检查表是否存在错误;优化表主要是消除删除和更新造成的空间浪费。
三,优化MySQL服务器
优化MySQL服务器,属于专业操作,在此只做了解,如需深入研究,还请自己百度。