`
bzqgo
  • 浏览: 8419 次
社区版块
存档分类
最新评论

SQL 语句中 表与条件顺序 与效率

 
阅读更多

FROM多表顺序与效率

ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,

因此FROM子句中写在最后的表(基础表 driving table)将被最先处理.

在FROM子句中包含多个表的情况下,

你必须选择记录条数最少的表作为基础表.

当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.

首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,

然后扫描第二个表(FROM子句中倒数第二个表),

最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.


例如: 表 TAB1 16,384 条记录 ,表 TAB2 1 条记录

选择TAB2作为基础表 (最好的方法)

select count(*) from tab1,tab2 执行时间0.96秒

选择TAB2作为基础表 (不佳的方法)

select count(*) from tab2,tab1 执行时间26.09秒

多表连接与效率

如果有3个以上的表连接查询,

那就需要选择交叉表(intersection table)作为基础表,

交叉表是指那个被其他表所引用的表.

例如:

EMP表描述了LOCATION表和CATEGORY表的交集.

SELECT *

FROM LOCATION L ,

CATEGORY C,

EMP E

WHERE E.EMP_NO BETWEEN 1000 AND 2000

AND E.CAT_NO = C.CAT_NO

AND E.LOCN = L.LOCN

将比下列SQL更有效率

SELECT *

FROM EMP E ,

LOCATION L ,

CATEGORY C

WHERE E.CAT_NO = C.CAT_NO

AND E.LOCN = L.LOCN

AND E.EMP_NO BETWEEN 1000 AND 2000


where 条件中等号两端字段顺序对效率的影响


现有两表A(大)、B(小)作关联查询,SQL语句如下:

SQL1:select * from A,B where A.id = B.id

SQL2:select * from A,B where B.id = A.id

在写SQL的时候可能这个顺序都是随便写的,当然SQL1和SQL2 执行的结果是完全相同的,那效率是否也一样呢,答案是否定的。SQL1 相当于将A表的id取出来,然后遍历B表进行查询,SQL2相当于将B表的id取出来,然后遍历A表进行查询。如果表A的记录条数为m,表B的记录条数为n,SQL1比较的次数为n的m次方,SQL2比较的次数为m的n次方。所以在一般情况下,表A大,表B小的时候,SQL2的效率更高。





SQL1:select * from A,B where A.id = B.id

SQL2:select * from A,B where B.id = A.id

在写SQL的时候可能这个顺序都是随便写的,当然SQL1和SQL2 执行的结果是完全相同的,那效率是否也一样呢,答案是否定的。SQL1 相当于将A表的id取出来,然后遍历B表进行查询,SQL2相当于将B表的id取出来,然后遍历A表进行查询。如果表A的记录条数为m,表B的记录条数为n,SQL1比较的次数为n的m次方,SQL2比较的次数为m的n次方。所以在一般情况下,表A大,表B小的时候,SQL2的效率更高。

分享到:
评论

相关推荐

    SQL语句执行顺序说明

    ### SQL语句执行顺序说明 #### 一、SQL语句准备执行阶段 当SQL语句进入Oracle的库缓存后,为了确保其...通过遵循上述步骤和技巧,可以有效地提高SQL语句在Oracle数据库中的执行效率,从而提升应用程序的整体性能。

    sql语句中用问号代替参数

    注意,参数的位置是基于它们在SQL语句中出现的顺序,从1开始计数。 ### 总结 使用问号参数化查询是编写安全、高效SQL语句的关键实践。它不仅可以防范SQL注入,还能优化性能,同时减少因字符串拼接导致的潜在错误。...

    SQL语句中SELECT语句的执行顺序

    ### SQL语句中SELECT语句的执行顺序 在SQL语言中,`SELECT`语句是进行数据查询的核心工具。为了确保查询结果的准确性和效率,理解`SELECT`语句内部的执行顺序至关重要。本文将详细解析`SELECT`语句各子句的执行...

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

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

    ORACLE 优化sql语句提高oracle执行效率 .doc

    ORACLE 优化 SQL 语句提高 Oracle 执行效率 Oracle 是一个功能强大的关系数据库管理系统,然而,如果不正确地使用 SQL 语句,可能会导致执行效率低下。为了提高 Oracle 的执行效率,需要遵循一些最佳实践。下面是...

    Effective MySQL之SQL语句最优化.pdf

    3. SQL语句优化的重要性:在数据库操作中,SQL语句的效率直接影响到应用的运行性能。因为数据库系统是多用户环境,对SQL语句的优化可以减少资源的竞争,提高并发处理能力。 4. SQL语句优化相关原理:优化原理包括但...

    Sql语句生成器

    8. **定制和配置**:高级的Sql语句生成器允许用户自定义输出格式,如添加注释、设置编码格式,甚至可以调整SQL语句的顺序以优化执行效率。 9. **错误处理和报告**:在迁移过程中,工具应能捕获和报告任何错误,便于...

    oracle 查看当前会话执行的sql语句

    除了查看SQL语句本身,我们还需要关注会话的等待事件,这些事件可能会影响SQL语句的执行效率。 ```sql -- 查询当前会话的等待事件 select event, count(*) from v$session where event not in ('SQL*...

    sql语句优化建议

    SQL语句优化是数据库管理与维护中的关键环节,尤其在处理大规模数据集时显得至关重要。优化不仅能够显著提升查询效率,减少资源消耗,还能改善用户体验,确保系统的稳定性和响应速度。然而,SQL优化并非一蹴而就的...

    批处理执行sql语句

    批处理在IT行业中,特别是在数据库管理领域,是一个重要的概念,它允许用户一次性处理多个SQL语句,从而提高工作效率,减少数据库交互的次数,提升系统性能。在这个“批处理执行sql语句”示例中,我们可以深入理解...

    通过分析SQL语句的执行计划优化SQL.doc

    当一条SQL语句首次执行并解析后,其执行计划会被存储在系统全局区域SGA的共享池中,供后续相同的SQL语句复用,避免重复解析带来的资源消耗。共享SQL语句的关键在于SQL文本的严格匹配,包括空格、换行等细节。通过...

    SQL 语句完全优化

    - **使用V$SQLAREA视图**:通过查看V$SQLAREA视图中的统计信息(如EXECUTIONS、DISK_READS、BUFFER_GETS等),可以了解SQL语句的执行效率,进而找出性能瓶颈所在。 #### 11. 优化索引使用 - **合理设计索引**:对于...

    通过分析SQL语句的执行计划优化SQL(总结)

    在数据库管理中,SQL语句的执行效率是关键因素之一,尤其在处理大量数据时。通过对SQL语句的执行计划进行分析,我们可以找到优化查询性能的策略,从而提高数据库系统的整体性能。这篇博客"通过分析SQL语句的执行计划...

    sql语句的优化

    在数据库设计与管理中,SQL语句的优化是一项至关重要的工作。合理的SQL优化不仅能显著提升数据处理速度,还能有效降低服务器资源消耗,从而提高整个系统的响应时间和用户体验。本文将详细介绍如何通过优化SQL语句来...

    非常好用的SQL语句优化34条+sql语句基础

    在SQL编程领域,掌握高效的SQL语句优化技巧和基础知识是至关重要的。以下是对"非常好用的SQL语句优化34条+sql语句基础"这一主题的详细解析: 1. **索引优化**:索引是提高查询速度的关键。创建合适的索引(主键、...

    SQL语句查询数据表主键和所有字段

    在数据库管理中,了解如何通过SQL语句查询数据表的主键和所有字段是一项基本而重要的技能。这不仅有助于数据库管理员或开发人员更好地理解数据库结构,还能在进行数据操作、优化查询性能或解决数据完整性问题时提供...

    SQL语句嵌套的实例.rar_SQL语句_sql 语句_sql嵌套

    嵌套SQL语句是数据库操作中的高级技巧,能够帮助我们处理多表关联、分组统计等复杂数据问题。下面我们将详细探讨SQL语句嵌套的相关知识点。 1. **子查询**:子查询是嵌套SQL的核心概念,它是一个独立的查询语句,...

    SQL技巧 常用SQL操作语句

    此SQL语句使用`SELECT INTO`语法来创建新表`b`,其结构与表`a`完全相同。由于`WHERE 1<>1`条件永远不会满足,因此不会有任何数据被插入到新表`b`中,从而实现了仅复制表结构而不复制数据的目的。 #### 2. 拷贝表...

    sql语句

    总的来说,熟练掌握这些基本的SQL语句是数据库操作的基础,能够帮助用户有效地管理与查询数据。随着学习的深入,你将能够运用更高级的SQL技巧,如视图、存储过程和触发器,进一步提升数据库管理的效率和灵活性。

Global site tag (gtag.js) - Google Analytics