前言
项目系统开发过程中的一个重要性能优化步骤就是SQL数据库的优化
基于SQL语句开发执行流程优化简介
在解释SQL优化前,先简述一下SQL的执行过程,并提出一些简单的优化方案;
1、客户端编写并发送SQL语句:此处是SQL语句的创建过程,我们需要合理编写正确的SQL语句,比如减少不必要的数据操作、是否合理建立索引、是否利用了合理的数据操作等;
而在发送阶段还应考虑是否使用了连接池和长连接,当然这些既有好处也有坏处,客户端也需要考虑是否需要建立本地缓存,如果需要操作数据库、需要建立多少并发度的连接;
2、当客户端把SQL语句传送到服务器后,服务器进程会对该语句进行解析。解析的第一个步骤是进行高速缓存查询,这里的缓存存储的主要是已经经过SQL解析的SQL语句,它存储SQL语句的解析模板,以后遇到同一语句可以做一个快速的处理,从而跳过下一解析处理步骤;
3、当在高速缓存中找不到对应的SQL语句时,会对SQL语句的语法进行检查,看看其是否合乎语法规则。若SQL 语句符合语法上的定义的话,接下来对语句中涉及的表、索引、视图等对象进行解析,并对照数据字典检查这些对象的名称以及相关结构,看看这些字段、表、视图等是否在数据库中。当语法、语义都正确后,系统就会对我们需要查询的对象加锁。这主要是为了保障数据的一致性,防止我们在查询的过程中,其他用户对这个对象的结构发生改变。当语法、语义通过检查之后,还会检查连接用户是否有这个数据访问的权限。然后进行最佳执行计划的确定;
4、经过一系列的SQL解析处理,进入SQL的执行过程各个SQL语句都会先尝试在缓冲池中操作数据,这个缓冲池是MySQL的缓存系统,淘汰策略是LRU,如果可以扩大这个缓存的命中率,也可以优化效率,不过当缓存池的大小超过数据本身的大小,对于数据文件的操作几乎都在内存中执行,此时数据库的缓冲池性能可能达到最优,无法上升;
5、如果缓冲池中没有数据,会尝试从磁盘来进行数据的操作,如果是DML语句,还会进行redo log和undo log的记录,进行数据库的操作后会进行缓冲池的备份;在硬盘层面