`

sql语句的执行顺序——简介

阅读更多

原文:

http://www.blogjava.net/youling/archive/2009/03/06/243177.html

PS:对原文最后部分作少小修改 

 

这篇似乎也不错:

http://www.phpchina.com/html/96/1296-4555.html

 

http://maxclapton.comoj.com/?p=210

 

 

但是select 先还是order by先?

这个测试一下,应该是看执行过程。

 

 

 

 

 

一、sql语句的执行步骤:
1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。
2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。
3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。
4)表达式转换, 将复杂的 SQL 表达式转换为较简单的等效连接表达式。
5)选择优化器,不同的优化器一般产生不同的“执行计划”
6)选择连接方式, ORACLE 有三种连接方式,对多表连接 ORACLE 可选择适当的连接方式。
7)选择连接顺序, 对多表连接 ORACLE 选择哪一对表先连接,选择这两表中哪个表做为源数据表。
8)选择数据的搜索路径,根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。
9)运行“执行计划”

 


二、oracle 共享原理:
     ORACLE将执行过的SQL语句存放在内存的共享池(shared buffer pool)中,可以被所有的数据库用户共享。

当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径.。这个功能大大地提高了SQL的执行性能并节省了内存的使用。

 

三、oracle 语句提高查询效率的方法:

1:where column in(select * from ... where ...);

2:... where exists (select 'X' from ...where ...);

 

第二种格式要远比第一种格式的效率高。

 

在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。

使用EXIST,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,

这就节省了时间Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中。

 

避免使用having子句。HAVING 只会在检索出所有记录之后才对结果集进行过滤。

这个处理需要排序,总计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

 

四、SQL Select语句完整的执行顺序: 

1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、select 的字段;

8、使用order by对结果集进行排序。

分享到:
评论

相关推荐

    ORACLE数据库SQL语句的执行过程

     解析(PARSE)—— 绑定(BIND)——执行(EXECUTE)——提取(FETCH 只有SELECT才需要这步)  解析  服务器进程接收到一个SQL语句时,首先要将其转换成执行这个SQL语句的有效步骤,这些步骤被称为执行计划。...

    显示 sql 执行效率.

    SQL*Plus 提供了一个非常实用的功能——自动跟踪(Auto Trace),它可以帮助用户分析 SQL 语句的执行情况,包括执行时间、资源消耗等关键性能指标。通过设置 Auto Trace,可以方便地获取 SQL 语句的执行计划...

    sql 优化基础——程序员必看

    通过分析执行计划,我们可以了解SQL语句的执行顺序和资源消耗,从而找到可能的性能瓶颈。 索引是SQL优化的重要工具,它可以显著加快数据检索速度。索引分为多种类型,包括B-tree索引和Bitmap索引。B-tree索引是一种...

    影响sql语句查询效率的因素

    本文将深入探讨影响SQL语句查询效率的关键因素,特别关注查询优化与LIKE语句的使用,帮助数据库管理员和开发人员识别并解决查询性能瓶颈。 ### 影响SQL查询效率的因素 #### 1. **处理NULL值** 当SQL查询涉及对...

    SQL-grammer-collection.zip_sql语句collection

    《SQL语句大集合——从基础到进阶》 SQL(Structured Query Language)是数据库管理的语言,用于查询、插入、更新和删除数据。本资料集“SQL-grammer-collection.zip”是一个全面的SQL语句大全,分为基础部分和提升...

    读懂oracle sql执行计划

    执行计划的顺序通常表示了Oracle数据库执行SQL语句的步骤顺序。了解执行计划的真实执行顺序有助于我们理解哪些操作是并行的,哪些是顺序的,以及如何影响最终查询的性能。 为了读懂执行计划,通常需要实践和经验的...

    MS SQL 基础语句教程

    #### 第一天:SQL简介 - **SQL简史**:SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。它最初由IBM的三位研究人员于1974年提出,后来经过标准化,成为了一个广泛采用的数据访问语言。 - *...

    基础sql语句大全(详细解析,注意事项)(csdn)————程序.pdf

    ` 显示创建数据库时使用的具体SQL语句,以验证其编码设置。 2. **创建、删除、查看表** - **删除表**:`DROP TABLE 表名;` 删除表,如果表不存在,可以使用 `IF EXISTS` 条件来避免错误,例如 `DROP TABLE IF ...

    通过SQL语句实现行列转换的几种方法

    ### 通过SQL语句实现行列转换的几种方法 在日常工作中,我们经常需要处理的数据结构并不总是按照我们期望的方式组织的。特别是在制作自定义报表或进行产品开发时,经常会遇到需要将数据从一种布局转换到另一种布局...

    MSSQL高级方法-构造畸形语句

    本文将深入探讨MSSQL(Microsoft SQL Server)环境下的高级注入技术——构造畸形SQL语句的方法,这种技术通常被用于加深盲注操作,即在无法直接看到查询结果的情况下,通过精心设计的SQL语句来获取所需的信息。...

    Oracle数据库Sql语句详解大全.pdf

    ### Oracle数据库SQL语句详解——SELECT查询与条件查询 #### 第一章 SELECT查询 ##### 1.1 基本语法 SELECT语句是Oracle数据库中最常用的查询数据的方法之一,其基本语法结构如下: ```sql SELECT <列名> FROM ...

    T-SQL核对清单——13条卓有成效的T-SQL实践.pdf

    11. 使用分号结束T-SQL语句:使用分号结束语句是符合ANSI标准的,且适用于多种数据库平台。SQL Server 2005开始,某些语句将强制需要使用分号,因此建议开发人员从现在开始就习惯使用。 12. 融入SQL Server社区:...

    企业项目二次开发——JDBC SQL Profiler应用.pdf

    在使用SQL Profiler工具的过程中,开发者可以通过执行时间对SQL语句进行排序,从而精确地看到每一个数据库操作的执行顺序和时间,这对于掌握流程的执行细节至关重要。此外,SQL Profiler的界面简单直观,由菜单、...

    分组字符合并SQL语句 按某字段合并字符串之一(简单合并)

    标题:按某字段合并字符串之一(简单合并) 描述:将如下形式的数据按id字段合并value字段。...1、sql2000中只能用自定义的函数解决 create table tb(id int, value varchar(10)) insert into tb values(1,

    基于索引的SQL语句优化之降龙十八掌

    在数据库管理中,SQL语句的优化是提升系统性能的关键环节。"基于索引的SQL语句优化之降龙十八掌"这一主题深入探讨了如何通过有效地利用索引来改进SQL查询效率,从而达到优化数据库操作的目的。这篇博客的作者通过一...

    SQL语句练习实例之二——找出销售冠军

    在这个SQL语句练习实例中,我们要找出公司的销售冠军,即每个地区的销量前三名的销售员及其对应的销售额。首先,我们创建了一个名为`salesdetail`的表,其中包含四个字段:`Area`(地区)、`Saler`(销售员姓名)、`...

Global site tag (gtag.js) - Google Analytics