`

oralce SQL执行对比

阅读更多
要查询一个人的身高、体重为数字,而体重指数为空的数据。

类似的查询,可能会很多,例如:

userInfo表结构为:
iduser_idnamecodeval
135王五age22
235王五mobile18612341234
335王五idno331228198501024423
-- - - -
437王六age19
537王六mobile13212341234
637王六idnonull
-- - - -
839王七age18
939王七mobile18612341234
1039王七idno13312341234


查询
    年龄>18
    手机号不为空
    哪些人没填写身份证号

正确的查询结果是“王六”

三条语句,完成同样的查询功能,执行效率对比
表结构





第一种写法,使用exists进行查询
 select count(*)
   from pis_checkitemindexresult c
  where 
    exists (select 1
           from pis_checkitemindexresult c2
          where c2.itemindexmiscode = '1.2.4.1' --身高
            and f_is_num(c2.itemindexresultvalue) = 'T'
            and c2.workno = c.workno)
    and exists (select 1
           from pis_checkitemindexresult c3
          where c3.itemindexmiscode = '1.2.4.2' --体重
            and f_is_num(c3.itemindexresultvalue) = 'T'
            and c3.workno = c.workno)
    and c.itemindexmiscode = '1.2.4.3' --体重指数
    and c.itemindexresultvalue is null


PLSQL执行计划:




第二种写法,使用count(*)来查询

select count(*)
   from pis_checkitemindexresult c
  where
  (select count(*)
     from pis_checkitemindexresult c2
    where c2.itemindexmiscode = '1.2.4.1' --身高
      and f_is_num(c2.itemindexresultvalue) = 'T'
      and c2.workno = c.workno) > 0
      
  and (select count(*)
     from pis_checkitemindexresult c3
    where c3.itemindexmiscode = '1.2.4.2' --体重
      and f_is_num(c3.itemindexresultvalue) = 'T'
      and c3.workno = c.workno) > 0
 
  and c.itemindexmiscode = '1.2.4.3' --体重指数
  and c.itemindexresultvalue is null


PLSQL执行计划:




第三种写法:使用inner join来关联查询

select count(*)
  from pis_checkitemindexresult c
  inner join pis_checkitemindexresult c2 on c.workno = c2.workno
  inner join pis_checkitemindexresult c3 on c.workno = c3.workno
 where
   
   c2.itemindexmiscode = '1.2.4.1'
   and f_is_num(c2.itemindexresultvalue)='T'
   

   and c3.itemindexmiscode = '1.2.4.2'
   and f_is_num(c3.itemindexresultvalue)='T'
   

   and c.itemindexmiscode = '1.2.4.3'
   and c.itemindexresultvalue is null


PLSQL执行计划:
   




问题是哪种方法执行效率最高,现在每个都10分钟都执行不完。
  • 大小: 90.9 KB
  • 大小: 78.3 KB
  • 大小: 89.7 KB
  • 大小: 100.7 KB
分享到:
评论

相关推荐

    sql 教程对比 oracle sql serve 和 my sql 学习 sql的好教程

    ### SQL教程:Oracle SQL Server与MySQL对比学习 #### 一、引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。无论是初学者还是经验丰富的数据专家,在面对庞大的数据...

    Oracle的SQL监视工具SQLTracker

    2. **历史查询分析**:记录并存储过去的SQL执行记录,便于对比不同时间点的性能变化,进行长期性能趋势分析。 3. **性能图表**:通过图表形式展示CPU使用率、I/O等待时间等关键指标,直观地揭示性能问题。 4. **...

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 对比 Oracle、SQL Server 及 MySQL 是目前最流行的三大关系数据库管理系统,各有其优缺点。本文将从表空间、查询语句、事务、分区表和分区索引、优缺点等方面对三者进行比较。 表空间...

    Oracle数据库sql语句 跟踪器

    5. **对比分析**:比较不同时间段或不同版本的SQL执行性能,帮助识别性能提升或下降的原因。 6. **优化建议**:根据SQL语句的执行情况,提供优化建议,如索引调整、查询改写等。 7. **报告生成**:自动生成SQL监控...

    压测Oracle的SQL语句的性能情况

    3. **执行计划**:通过EXPLAIN PLAN分析SQL执行路径,了解数据库如何处理查询,找出可能导致性能问题的步骤。 4. **索引策略**:正确创建和使用索引能显著提升查询速度,但过多的索引也会增加写操作的负担。 5. **...

    ORACLE SQL官方教程

    Oracle提供了许多性能优化工具和策略,如Explain Plan分析查询执行路径,绑定变量,物化视图,以及使用SQL Tuning Advisor进行自动调整。 12. **PL/SQL** PL/SQL是Oracle的扩展SQL,结合了SQL的查询能力与过程...

    oracle sql 高级编程

    Oracle SQL高级编程是针对数据库开发和管理的专业领域,旨在帮助高级编程人员深入理解和掌握SQL在Oracle数据库中的应用。Oracle数据库是世界上最广泛使用的数据库系统之一,它提供了强大的功能和高效的性能,使得SQL...

    ORACLE SQL优化工具sqlhc

    通过运行这个脚本,你可以获得关于SQL执行计划、绑定变量、索引使用情况、缓存命中率等多方面的信息。它还能帮助识别慢查询,分析SQL执行时间,以及是否过度使用了CPU或I/O资源。 接下来是`sqldx.sql`,这个脚本...

    mastering oracle sql

    触发器在特定数据库事件发生时自动执行代码,而存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑。 此外,"mosql2_data.sql"这个文件很可能包含了书中示例所用到的表结构和数据。这使得读者能够按照书中的...

    Oracle SQL高级编程 中文版

    《Oracle SQL高级编程》是图灵程序设计丛书数据库系列中的一部重要著作,由资深Oracle专家撰写,并得到了OakTable团队的强力推荐。这本书是Oracle开发人员和DBA提升技能、深入理解Oracle SQL不可或缺的参考资料。它...

    Oracle SQL Monitor

    3. **性能比较**:对比不同时间段或不同版本的SQL执行性能,找出优化空间。 4. **调优建议**:根据收集的数据,提供可能的优化建议,如索引调整、查询改写等。 5. **资源分配**:帮助优化数据库资源分配,减少等待...

    Oracle SQL优化文档

    使用统一的监控执行时间标准有利于更精确地发现问题,并对比优化前后的效果。 在SQL语句分析部分,文档介绍了常用的SQL分析命令,其中explain命令是最常用的工具之一。通过explain命令可以分析语句执行的开销、优化...

    oracle sql调优原则

    - **统一SQL书写格式**:使用统一的SQL书写格式可以减少Oracle解析SQL所需的时间,并减少共享内存中的冗余信息,进而提高SQL执行效率。 - **SQL语句大小写**:Oracle默认会将小写字母转换为大写,因此建议直接使用...

    oracle 和sql Server 函数对比

    本文将深入探讨Oracle与SQL Server在常用函数方面的对比,以便开发者能够更好地理解和选择适合特定场景的函数。 ### 数值函数 1. **长度计算** - Oracle使用`LENGTH`函数,而SQL Server使用`DATALENGTH`函数。 -...

    [英文]《精通Oracle SQL》(CHM格式)

    14. **性能优化**:讨论SQL性能监控和优化的方法,如执行计划分析、索引优化、查询重写和绑定变量。 15. **高级主题**:可能涉及Oracle特定的特性,如物化视图、分区表、 materialized join views 和其他高级功能。...

    深度对比Oracle与SQL Server

    【深度对比Oracle与SQL Server】 在信息技术领域,数据库管理系统(DBMS)的选择对企业的信息架构至关重要。Oracle和Microsoft SQL Server是两大主流的关系型数据库管理系统(RDBMS),各自有着广泛的应用。本文...

    数据库对比工具(支持sqlserver ,oracle)

    总结来说,"数据库对比工具(支持sqlserver ,oracle)"是数据库管理员和开发人员不可或缺的辅助工具,它提高了工作效率,减少了因数据结构不一致导致的问题,确保了数据库升级过程的顺利进行。无论是对SQL Server...

    sql大全及oracle SQL

    可能会涵盖SQL标准与Oracle特性的对比,帮助用户理解如何在Oracle环境中适应和利用SQL的通用性和特殊性。 5. **学习与实践**: 学习SQL和Oracle SQL,不仅要掌握语法,还要通过实际操作来提升技能。可以创建自己...

    Oracle SQL语句执行计划的探讨.pdf

    Oracle SQL语句执行计划是数据库管理系统中非常关键的一部分,它决定了SQL查询如何在数据库中执行,从而直接影响到查询效率和整体系统性能。Oracle数据库通过共享池来存储已解析的SQL语句及其执行计划,以此避免对...

    oracle与mysql对比

    - `SQL*Plus`: Oracle的标准客户端工具,用于执行SQL语句和脚本。 - 命令行启动方式:`c:\orawin95\bin\sqlplus.exe` - **MySQL**: - `mysql`: MySQL的标准客户端工具。 - 命令行启动方式:`c:\mysql\bin\mysql....

Global site tag (gtag.js) - Google Analytics