刚刚看了一下2014年中国数据库技术大会(DTCC)PPT,网易杭州研究院的一位同学介绍了一下数据库的优化与调优。
网易的Mysql优化做的很好,而且还写了本书和大家分享这些经验《深入浅出MySQL数据库开发优化与管理维护》。
文章里面大多数写的是我们平常很少想到的硬件方面的优化,还是很深入的。其中提到的《面向程序员的数据库访问性能优化法则》引起了我的关注。一直觉得,程序员应该会写好的SQL,就像应该写好的代码一样。我们读过《Effective C++》等语言类的经典书籍,也可以读一下数据库的优化的文章和书籍,例如:《Effective MySQL 之 SQL语句最优化》。
《面向程序员的数据库访问性能优化法则》从SQL语句,应用到业务上,都给了我们一些建议。其中最核心的应该就是,尽可能减少数据量,减轻延时。例如
-
写出具体字段 select a , b ,c from xx,还不是用 select * from xx ;
-
减少连接次数,使用批量提交,或者使用 select xxx where id in ( 1, 2 , 3 )来查询少量的集合数据,而不用 for i in n{ select xxx from t where id = i ; }
-
优化业务逻辑,使数据量减到最小;就像我们写for循环的时候,将时间复杂度尽量降低。
文章中讲述的索引让我不得不反思了之前建立索引的方式。以前盲目地以为需要查询的条件都加上索引,系统便会加快。但对于大量数据的CRUD来说,索引增加的额外开销开始变得不容忽视。
索引对于Insert性能降低56%
索引对于Update性能降低47%
索引对于Delete性能降低29%
文中对一些经常使用的字段建立索引给了一些指导性建议,感觉挺实用的。
另外,关于SQL的执行计划和statement绑定变量的描述也让我受益,不知原理,很难做到最优。
关于Mysql的书籍很多,例如:
-
《Effective+MySQL之SQL语句最优化》
-
《Mysql_Explain_语法详细解析》
-
《MySQL性能调优与架构设计》
-
《高性能MySQL》
读万卷书,行万里路,深入原理后,MySQL才能更好的为我们服务。当然,不管NoSQL如何侵入数据库体系,只要在各自的场景用好,就实现了它们的价值。
来源:oschina
链接:https://my.oschina.net/u/581790/blog/363464