SQL:一种熟悉又陌生的编程语言,你了解他吗?
怎么样来理解少做工作呢?比如创建索引往往可以提高访问效率,其原理就是将原来的表扫描转换为索引扫描,通过一个有序的结构,只需要少量的IO访问就可以得到相应的数据,因此效率才比较高。这就可以归纳为少做工作。 怎么样来理解不做工作呢?比如在系统设计中常见的缓存设计,很多是将原来需要访问数据库的情况,改为访问缓存即可。这样既提高了访问效率,又减少了数据库的压力。从数据库角度来说,这就是典型的不做工作。 第二条,“If must do,do it fast!”翻译过来,如果数据库必须做这件事件,那么请尽快做完它。 怎么样来理解这句话呢?比如数据库里常见的并行操作,就是通过引入多进程来加速原来的执行过程。加速处理过程,可以少占用相关资源,提高系统整体吞吐量。 六、SQL 执行过程 SQL的执行过程比较复杂,不同数据库有一定差异。下面介绍以两种主流的数据库(Oracle、MySQL)介绍一下。 ![]() 用户提交了一条SQL语句 数据库按照SQL语句的字面值计算出一个HASH值 根据HASH值,判断一下在数据库缓冲区中是否存在此SQL的执行计划。 如果不存在,则需要生成一个执行计划(硬解析过程),然后将结果存入缓冲区。 如果存在的话,判断是否为相同SQL(同样HASH值的语句,可能字符不相同;即使完全相同,也可能代表不同的语句。这块不展开说了) 确认是同一条SQL语句,则从缓冲区中取出执行计划。 将执行计划,交给执行器执行。 结果返回给客户端。 ![]() 客户提交一条语句 现在查询缓存查看是否存在对应的缓存数据,如有则直接返回(一般有的可能性极小,因此一般建议关闭查询缓存)。 交给解析器处理,解析器会将提交的语句生成一个解析树。 预处理器会处理解析树,形成新的解析树。这一阶段存在一些SQL改写的过程。 改写后的解析树提交给查询优化器。查询优化器生成执行计划。 执行计划交由执行引擎调用存储引擎接口,完成执行过程。这里要注意,MySQL的Server层和Engine层是分离的。 最终的结果有执行引擎返回给客户端,如果开启查询缓存的话,则会缓存。 七、SQL优化器 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |