SQL执行过程

一般来说,数据库处理SQL都会经过三个过程:分析、执行、返回结果,比如COGNOS ReportNet通过拖放式完成表现层后,还是会自动生成SQL,然后将SQL传递到ORACLE进行处理。

1。分析

分析是处理SQL语句的第一步,它是SQL语句处理过程较为重要的一步,它又包含几个方面:

(1)语法分析,oracel是采用数据库常用的自底向上的分析方法,包含检查语法规范,命名规范,它是处理SQL语句中最消耗时间且代价最高的步骤,主要表现在绑定变量和存储过程等方面:

A.绑定变量:这也是为什么使用在某种情况下绑定变量方式会比非绑定方式效率和性能高出几倍,主要是绑定变量只会编译一次,随后就会把查询计划存储在一个共享池里,以便以后获取和重用这个查询计划。

B.存储过程:存储过程比一般的SQL语句要快,就是它不用再次编译,而且还可以利用数据库里许多特性,使得它的速度会比一般SQL语句快很多

(2)语义分析,学过编译原理的都知道,这一步是非常重要的,ORACLE主要是分析SQL语句格式是否正确,各个对象是否存在,以及它是否有足够的权限执行

(3)视图转换,它会将涉及的视图的查询语句转换为较为简单的等效连接表达式,有些人认为视图一定执行速度会比使用表要快,其实不一定的,主要具体情况具体分析,只要把这篇文章真正理解,自己分析是不困难的;

(4)表达式转换。将复杂的SQL表达式转换为相应的对基表的查询语句。写SQL的标准

A.不要再WHERE字句中进行计算,如SELECT AT_ID FROM ARTICLE WHERE AT_ID >10*10000 AND AT_ID<(10+1)*10000是不允许的就是这个原理

B.注意数据类型的匹配

SELECT BK_ID FROM BOOK WHERE BK_PRICE>30 就比不上SELECT BK_ID FROM BOOK WHERE BK_PRICE>30.00好啦

(5)选择优化器,学过编译原理时候就知道,使用不用的优化器是会有不同的执行效率,当然,最好是能根据批量的SQL自己编一个特定的优化器

(6)选择连接方式。INFORMIX就有简单的归并连接 和排序-归并连接技术之分,主要看是否使用索引的问题。

(7)选择连接顺序。多表连接,oracle选择那一个对表先连接,并选择源数据表

(8)选择数据搜索路径,根据以上条件选择合适的数据搜苏路径,如选用全表搜索还是利用索引或是其他方式搜索

(9)到SQL中为该SQL语句找到一个共享SQL区,如已经有共享SQL区,则直接执行共享区内容。

2。执行

主要在于使用UPDATE和DELETE语句时,必须将行锁定,以免其他用户修改。ORACLE先从数据库缓冲区中寻找是否存在所要的数据块,如果存在,就直接读或修改,否则从物理文件中读到数据库缓冲区中。

3。返回结果

对SELECT 语句需要返回结果的语句,首先看是否需要排序,需要,则排序后返回给用户,然后根据内存的大小不同,可以一次取出一行数据,一可以一次取一组数据。这时,可能要用到数据结构中的外部排序,并归排序等算法,所以如内存允许的话,尽量大会提高性能的;

最后总结一下经用使用的SELECT的处理步骤:

打开游标
|
---------查看共享SQL区,是否有相同的SQL语句
| |
| 分析
| |
| 定义
------------------------ |
|
------------------------- 绑定变量
| |
| 捆绑
--------------- ----------- |
|
并行处理
|
执行查询
|
返回结果
|
关闭游标

SQL执行过程,布布扣,bubuko.com

时间: 2024-10-11 22:43:36

SQL执行过程的相关文章

SQL执行过程中的性能负载点

一.SQL执行过程 1.用户连接数据库,执行SQL语句: 2.先在内存进行内存读,找到了所需数据就直接交给用户工作空间: 3.内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到磁盘中查找: 4.找到的数据放到内存中,在内存进行数据过滤再放到会话工作空间. 5.假设会话工作空间需要暂存结果集进行排序,但空间不足的话,就会借用磁盘tmpdir,最后再将结果返回给用户. 注: 用户会话空间是内存中分配出来的一个工作空间,而innodb_buffer_pool是innodb存储引

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;新增记录SQL执行过程

有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件.3.2版本我们在框架底层新增了记录框架运行的所有SQl过程保存到用户指定的地方以便分析查看,只需要在配置文件把配置项"LogSQL"设置为True即可.框架会自动记录各常用数据库如:Oracle.SqlServer.MySQL等的操作情况. 一.Web记录Sql执行情况 1.在我们的Web项目中要记录SQL可以在Web的配置文件中设置LogSql

oracle &nbsp; SQL执行过程

1.sql执行过程 1>解析(判断对象是否存在,是否有权限查询,语义解析,检查缓存中是否有相同的SQL等等) 2>优化(CBO确定优化模式,确定访问路径,联接顺序,过程中通过很多综合因素估算出各种方式的资源消耗,选择消耗最小为优) 3>生成QEP(Query Execution Plan:查询执行计划) 4>执行QEP,返回结果

SQL监控:mysql及mssql数据库SQL执行过程监控审计

最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在.所以从今天起还是要继续拾起墨笔(键盘),继续好好维护这个博客,写出心里最真实的想法,写出平时接触到的一些人和事以及一些新的技术.当然写博客也不是单纯的为了记录,也想通过博客来结交更多的朋友,今天在公司图书馆看到一句话大致说的是“在今天这个年代,已经很难等到三顾茅庐,诸葛亮也需要博客.微博和影响力”,在一年前就曾想过写一篇关于怎样通过博客来提高个人影响力的文章,我会尽

Mysql体系结构及sql执行过程总结

Mysql体系结构及sql执行过程总结 一.体系结构图 各模块说明: 1.Connectors:各应用程序与SQL的交互 2. Management Serveices & Utilities:系统管理和控制工具 3.Connection Pool:连接池 管理缓冲用户连接,线程处理等需要缓存的需求 4.SQL Interfaces:SQL接口 接受用户的SQL命令,并且返回用户需要查询的结果.例如select from就是调用SQL Interface 5.Parser:解析器 (1)将SQL

(转)logback 打印Mybitis中的sql执行过程

场景:在程序开发过程中经常需要跟踪程序中sql语句的执行过程,在控制台打印出sql语句和对应的参数传递就能够更快的定位错误! 原文出处:http://www.cnblogs.com/beiyeren/p/4196134.html 这里所采用的日志框架为logback 1 不同版本的Mybitis对应不同的控制策略 1.1 myBatis3.0.6左右的版本时 打印sql的时候只需要配置如下属性: <logger name="java.sql.Connection" level=&

Oracle 共享池和数据库高速缓冲区,引出SQL执行过程

共享池在数据库中可以说是相当重要动力资源,关系着数据库的性能瓶颈. 什么是共享池呢? 共享池是内存结构中SGA(系统全局区)的一部分,包含了:库缓冲区.数据字典缓冲区.服务器结果缓冲区.预留池,也是着四个区组成了共享池,这四个区的功能就是共享池的功能. 库缓冲区 共享SQL区:存放执行计划和解析树,当用户执行一条SQL语句时,共享池会根据SQL语句的复杂程度分出一定的内存给用户,当用户再次执行相同的SQL语句时,不必再次进行解析,提高执行语句的执行效率.类似于古代将领带兵打仗,皇帝就是用户,把将

mybatis源码学习(二):SQL执行

从上一篇文章中,我们了解到MapperMethod将SQL的执行交给了sqlsession处理.今天我们继续往下看处理的过程. SqlSession接口除了提供获取Configuration,Mapper的方法之外,主要的作用就是提供增删该查的方法. /** * Copyright 2009-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License&q

mysql(1)—— 详解一条sql语句的执行过程

SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同.这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果可以相同.这里SQL语言的作用就类似于java中的接口,数据库就类似于java中接口的实现类,SQL语句就类似于java接口中的方法.不同的是java中