一、sql优化的必要性
在我们日常工作中,参与开发上线和维护的项目在经过一段时间的运行,数据体量回答道一定的程度,业务数量会增多,sql的执行效率会逐渐降低,对程序的影响会逐渐增大,所以我们需要对sql进行优化,提高程序的性能。
当然,在我们的开发过程中也需要注意sql上面的一些问题,避免sql执行缓慢,降低性能瓶颈。
二、sql优化的四个方面
在日常的工作中,以MySql为例,我总结了以下数据库优化的四个方面:
1、sql语法优化
在日常开发中,我们首先就要在sql的编写过程中注意到效率这个问题。
这里大概分为两点:
第一点是业务方向,理清表和表之间的关系,简化sql语句,保证sql平稳运行。那么怎么简化呢,在数据量没有很大的情况下,我们一般都会使用多表查询,在多表查询的时候最好不要关联超过5个以上的表,连接的表越多,编译的时间和连接开销就会越大,性能就更不好控制;把复杂的sql拆分,使他分成几个小部分逐步执行,优先执行能够筛选掉大批数据的sql,这样结果会更加的按照我们预测的方向去走;如果真的需要关联很多个表才能拿到数据,可能我们的表结构有问题,这个时候我们可以酌情优化表结构。
第二点是索引使用,主要是注意我们的索引在执行sql语句的过程中不会失效,这种例子比较多,比如说我们在使用like查询时,使用%a(a为查询内容),在这种情况下就会造成索引失效,或者使用复合索引时,索引字段的顺序和查询顺序不一致等等。另外就是MySql查询只是用一个索引,所以我们在where子句中使用了索引的话,在oerder by中的列是不会使用索引的。
2、sql索引优化
主要是对慢sql、需要添加索引的查询列添加合适的索引,在多条件的查询下,单个索引的查询速度不足以满足我们的需要的时候,可以添加复合索引,在使用时,要保证复合索引的字段顺序和sql中查询的索引顺序一致。补充一点就是,我们在建立索引的时候,在满足字段使用的前提下,尽量减少字段的长度,减少B+树的高度,提升查询效率。
3、数据库优化
如果在索引都无法满足的情况下或者我们需要暂时性的提升MySql数据库的性能以应对可以预见的大批量访问时,我们可以提高数据库的配置,以提高sql的执行效率。
4、服务器优化
在这种情况下,数据已经达到一个量级了,建议根据业务需求对数据库进行分库分表设计。
-- 入门菜鸟一枚,平时的一点工作经验总结,如果有看到同学感觉哪里不对,还请指正,共同学习进步!