`

查询优化

    博客分类:
  • sql
阅读更多

一、SQL语句优化:

1: exists 快于in

2: 数据量小时连接查询快于子查询,数据量大时子查询快于连接查询

3: select (*) 快于 select count(col)

4: 连接查询快于from多个表查询

如果查询结果来源于多个表中则用连接查询,如果最后结果来源于一个中则推荐用子查询

二、in可以分为三类: 

1、形如select  *  from  t1  where  f1  in  ('a','b'),应该和select  *  from  t1  where  f1  ='a'  or  f1='b'  或者  select  *  from  t1  where  f1  ='a'  union  all  select  *  from  t1  f1='b'比较效率,搂主可能指的不是这一类,这里不做讨论。 

2、形如select  *  from  t1  where  f1  in  (select  f1  from  t2  where  t2.fx='x'),其中子查询的where 里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。 

3、形如select  *  from  t1  where  f1  in  (select  f1  from  t2  where  t2.fx=t1.fx),其中子查询的where 里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。 

除了第一类in语句都是可以转化成exists  语句的,一般编程习惯应该是用exists而不用in. 

三、如A,B两个表, 

当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快: 

select  *  from  A  where  id  in  (select  id  from  B) 

当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,可以使用EXISTS: 

select  *  from  A  where  exists  (select  1  from  B  where  id  =  A.id  and  col1  =  A.col1) 

当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接: 

select  *  from  A  left  join  B  on  id  =  A.id   

所以使用何种方式,要根据要求来定。

 

select * from tba left join tbb on tba .id=tbb.id and  tbb.name = 'aaa'
select * from tba left join tbb on tba .id=tbb.id where tbb.name = 'aaa'

 

on 后的条件是连接的时候 过滤之用
由于是left join ,所以在on后面写第一个表的过滤条件都是没有用的

 

结果仍然存在不一致的可能的
跟实验数据有关(试验)

 

如果不是正式数据

你先执行: delete from tbb ;

然后再比较一下结果就可以看出来了

结果会是:

select * from tba left join tbb on tba .id=tbb.id and  tbb.name = 'aaa'
--返回tba所有记录

select * from tba left join tbb on tba .id=tbb.id where tbb.name = 'aaa'
-- 没有任何记录返回

 

on 和where
几乎不可能写出一致的来
2种写法就是2种逻辑

 

基本上not in 的写法都能用 A left join B on A.id=B.id where B.id is null 来取代
建立id索引后,效率有的时候能提升千百倍以上

 

//======

别名不可用在where group 中 可以用在order 中 这里的别名特指字段的别名

rownum只能是小于 不能是大于

====

 select
         *
     from
         ( select
             row_.*,
             rownum rownum_
         from
             ( select
                 czy0_.czgh as czgh21_,
                 czy0_.CHARGE_BZ as CHARGE2_21_,
                 czy0_.czmm as czmm21_,
                 czy0_.czqx as czqx21_,
                 czy0_.ksbm as ksbm21_,
                 czy0_.KSBM_JC as KSBM6_21_,
                 czy0_.srf as srf21_,
                 czy0_.xm as xm21_,
                 czy0_.yfbh as yfbh21_,
                 czy0_.ysbh as ysbh21_
             from
                 Czy czy0_ ) row_
         where
             rownum <= 10
         )
     where
         rownum_ > 5

分享到:
评论
1 楼 jyjava 2012-01-17  

相关推荐

    数据库查询优化算法

    数据库查询优化是数据库管理系统中的关键环节,其目的是在满足用户查询需求的同时,尽可能地提高查询效率,减少资源消耗。在数据库领域,有三种经典的查询优化算法:基于成本的优化、基于规则的优化以及动态规划优化...

    Oracle 多表查询优化

    Oracle 多表查询优化 Oracle 多表查询优化是指在 Oracle 数据库管理系统中,为了提高多表查询的效率和性能采取的一些优化策略和技术。在 Oracle 中,多表查询是指从多个表中检索数据的操作。这种操作可能会占用大量...

    基于机器学习的查询优化研究.docx

    "基于机器学习的查询优化研究" 本文主要介绍基于机器学习的查询优化研究,旨在提高查询效率和准确性。研究方法主要集中在特征选择、模型构建、实验设计和评估指标上。通过采用机器学习技术,训练出更高效的查询计划...

    Oracle查询优化改写 技巧与案例.pdf

    Oracle查询优化是数据库管理中的重要环节,它直接关系到数据库的性能和响应速度。针对Oracle数据库的查询优化,本文件提供了丰富的技巧和案例分析,以帮助读者深入理解优化原理,并能在实际工作中学以致用。 首先,...

    Oracle查询优化改写技巧与案例2.zip

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    《Oracle查询优化改写技巧与案例》PDF版本下载.txt

    根据提供的文件信息,本文将对《Oracle查询优化改写技巧与案例》这一主题进行详细的解析,涵盖Oracle查询优化的基本概念、重要性、改写技巧及其实际应用案例。 ### 一、Oracle查询优化概述 #### 1.1 查询优化定义 ...

    Oracle查询优化改写技巧与案例

    《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...

    百万数据级快速查询优化技巧

    标题与描述概述的知识点主要集中在数据库查询优化技巧上,尤其针对拥有百万级别数据量的数据库。以下是对这些知识点的详细解读: ### 数据库快速查询优化技巧 #### 1. 避免全表扫描,优化WHERE子句 - **空值判断**...

    MySQL数据库查询优化

    综述查询优化技术范围,包括查询重用、查询重写规则、查询算法优化、并行查询优化等 综述逻辑查询优化,包括子查询的优化、视图重写、等价谓词重写、条件化简、连接消除、非SPJ的优化等 综述逻辑物理优化,包括单表...

    数据库查询优化论文

    ### 数据库查询优化的核心知识点 #### 一、查询优化的重要性 数据库查询优化是数据库管理系统(DBMS)中的关键组件,其目标在于选择最有效的查询执行计划,以最小化资源消耗(如CPU时间、I/O操作)并提高响应速度。...

    百万数据查询优化海量数据查询优化

    【标题】:“百万数据查询优化海量数据查询优化” 在处理海量数据时,查询优化显得尤为重要,特别是当数据量达到百万级别甚至更高时。查询优化旨在提高数据查询的效率,减少查询时间,提升系统性能。以下是一些关键...

    Postgres查询优化方案

    本文将深入探讨如何针对Postgres进行查询优化,确保高效的数据检索,同时解决分页查询的问题。 1. **索引优化**:索引是提升查询速度的关键。对于频繁进行查询的字段,尤其是用于where条件、join条件和排序的字段,...

    Oracle查询优化改写-技巧与案例

    Oracle查询优化是数据库管理中的关键技能,尤其是在处理大型数据集时,有效的查询优化能显著提升系统性能,降低资源消耗。本书“Oracle查询优化改写-技巧与案例2.0”聚焦于这一主题,旨在为数据库管理员(DBA)和开发...

    分布式数据库查询优化

    ### 分布式数据库查询优化详解 #### 一、背景与挑战 随着信息技术的快速发展和各行各业对数据处理需求的增加,数据库系统面临着前所未有的挑战。一方面,数据量的急剧增长要求数据库具备更高的存储能力和更快的...

    ORACLE多表查询优化

    Oracle 多表查询优化 在 Oracle 数据库中,多表查询是一种常见的查询方式,但它也可能会对数据库性能产生影响。本文将讨论 Oracle 多表查询优化的几种方法,帮助开发者提高数据库性能。 1. 选择最有效率的表名顺序...

    Oracle数据库中大型表查询优化的研究

    在Oracle数据库中,大型表查询优化是一个至关重要的主题,尤其对于处理海量数据的企业级应用而言。Oracle数据库以其高效、稳定和强大的功能著称,但在处理大规模数据时,如果不进行适当的优化,查询性能可能会显著...

    数据库概论实验范文实验九:查询优化2

    在数据库领域,查询优化是提高数据库系统性能的关键环节。实验九“查询优化2”主要探讨了如何通过不同的策略和方法来提升SQL查询的执行效率。本实验基于《数据库概论》这本书,旨在帮助学习者深入理解查询优化的概念...

    基于半连接的分布式数据库查询优化算法探讨

    分布式数据库查询优化是关系数据库管理系统领域中的一个重要课题,它直接影响到数据库系统的性能,尤其在处理大量数据和复杂查询时,高效的查询优化算法可以显著减少查询响应时间,提高系统吞吐量。本文讨论的基于半...

    《查询优化》实验报告

    《查询优化》实验报告主要探讨了在SQL Server 2000环境下,如何通过查询优化提升数据库性能。实验中,采用了一个典型的学生-课程-选课的数据库结构,包括s、c和sc三个表,各表之间存在外键关联。通过对不同查询场景...

Global site tag (gtag.js) - Google Analytics