要查询一个人的身高、体重为数字,而体重指数为空的数据。
类似的查询,可能会很多,例如:
userInfo表结构为:
查询
年龄>18
手机号不为空
哪些人没填写身份证号
正确的查询结果是“王六”
三条语句,完成同样的查询功能,执行效率对比
表结构
第一种写法,使用exists进行查询
PLSQL执行计划:
第二种写法,使用count(*)来查询
PLSQL执行计划:
第三种写法:使用inner join来关联查询
PLSQL执行计划:
问题是哪种方法执行效率最高,现在每个都10分钟都执行不完。
类似的查询,可能会很多,例如:
userInfo表结构为:
id | user_id | name | code | val |
1 | 35 | 王五 | age | 22 |
2 | 35 | 王五 | mobile | 18612341234 |
3 | 35 | 王五 | idno | 331228198501024423 |
- | - | - | - | - |
4 | 37 | 王六 | age | 19 |
5 | 37 | 王六 | mobile | 13212341234 |
6 | 37 | 王六 | idno | null |
- | - | - | - | - |
8 | 39 | 王七 | age | 18 |
9 | 39 | 王七 | mobile | 18612341234 |
10 | 39 | 王七 | idno | 13312341234 |
查询
年龄>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分钟都执行不完。
发表评论
-
linux 安装mysql多个实例
2020-03-13 15:47 426mysql5.7.28多实例 安装mysql,不要启动 创 ... -
mongodb安全验证 密码登录
2020-03-09 16:07 8371、创建用户 cd /d C:\Program Files\ ... -
索引的创建对查询性能影响
2019-08-19 15:14 685索引的正确使用,对查询的性能影响很大 原查询,要2分多 ... -
mysql查询性能优化,650秒优化到0.18秒
2019-08-14 17:57 29开发人员技术水平不一,写出的sql执行性能怎么样,完全靠运气, ... -
MySQL 高可用集群架构 MHA 详解
2018-03-09 09:28 801MySQL 高可用集群架构 MHA ... -
B+tree 索引
2018-03-09 09:11 750mysql和oracle都用到B+tree ... -
怎么查看和修改 MySQL 的最大连接数
2018-03-09 08:47 1122通常,mysql的最大连接数默认是100, 最大可以达到163 ... -
mysql 删除重复记录 保留一条
2018-01-25 10:47 1173-- 方法一 /** 错误码: 1093 You ... -
rsync备份和删除指定文件
2018-01-02 10:23 2060文件异地备份时,需要将本地文件合并到服务器上,且不能删除服务器 ... -
windows mysql定时备份任务
2017-11-03 16:12 1007mysqlbak.cmd echo off set tx ... -
mysql 1418错误原因及解决
2017-09-30 11:14 1141SET GLOBAL log_bin_trust_functi ... -
windows上oracle11配置监听器
2017-08-23 14:00 1778oracle11 windows版安装后默认通过计算机名 ... -
centos yum 安装mysql
2016-08-11 10:08 531查看这篇文章 http://dev.mysql.com/dow ... -
expdp\impdp及exp\imp
2016-08-03 14:29 762作者写的文章很实用 ht ... -
oracle drop记录
2016-07-21 14:07 1591数据库中缺表了,查一下是什么时候删除的 select * ... -
powerdesigner 16 从数据库生成表结构无响应
2016-07-15 09:35 1335怪事了,powerdesigner从数据库反向生成表结构是,卡 ... -
oracle 删除和重建表空间脚本
2016-07-07 11:23 2612调试数据库生成脚本,需要频繁重建表空间 /** ... -
plsql11 x64 安装和配置 解决OCI: not initialized
2016-06-18 09:38 16961下载了instantclient-basic-windows. ... -
oracle instantclient和plsql配置
2016-05-23 14:47 7431、下载instantclient 下载后多解压到某文件夹下 ... -
oracle AL32UTF8 zhs16gbk 安装字符编码
2016-05-23 14:30 1561NLS_LANG是环境变量,包括3部分NLS参数:NLS_LA ...
相关推荐
### SQL教程:Oracle SQL Server与MySQL对比学习 #### 一、引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。无论是初学者还是经验丰富的数据专家,在面对庞大的数据...
2. **历史查询分析**:记录并存储过去的SQL执行记录,便于对比不同时间点的性能变化,进行长期性能趋势分析。 3. **性能图表**:通过图表形式展示CPU使用率、I/O等待时间等关键指标,直观地揭示性能问题。 4. **...
Oracle、SQL Server 及 MySQL 对比 Oracle、SQL Server 及 MySQL 是目前最流行的三大关系数据库管理系统,各有其优缺点。本文将从表空间、查询语句、事务、分区表和分区索引、优缺点等方面对三者进行比较。 表空间...
5. **对比分析**:比较不同时间段或不同版本的SQL执行性能,帮助识别性能提升或下降的原因。 6. **优化建议**:根据SQL语句的执行情况,提供优化建议,如索引调整、查询改写等。 7. **报告生成**:自动生成SQL监控...
3. **执行计划**:通过EXPLAIN PLAN分析SQL执行路径,了解数据库如何处理查询,找出可能导致性能问题的步骤。 4. **索引策略**:正确创建和使用索引能显著提升查询速度,但过多的索引也会增加写操作的负担。 5. **...
Oracle提供了许多性能优化工具和策略,如Explain Plan分析查询执行路径,绑定变量,物化视图,以及使用SQL Tuning Advisor进行自动调整。 12. **PL/SQL** PL/SQL是Oracle的扩展SQL,结合了SQL的查询能力与过程...
Oracle SQL高级编程是针对数据库开发和管理的专业领域,旨在帮助高级编程人员深入理解和掌握SQL在Oracle数据库中的应用。Oracle数据库是世界上最广泛使用的数据库系统之一,它提供了强大的功能和高效的性能,使得SQL...
通过运行这个脚本,你可以获得关于SQL执行计划、绑定变量、索引使用情况、缓存命中率等多方面的信息。它还能帮助识别慢查询,分析SQL执行时间,以及是否过度使用了CPU或I/O资源。 接下来是`sqldx.sql`,这个脚本...
触发器在特定数据库事件发生时自动执行代码,而存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑。 此外,"mosql2_data.sql"这个文件很可能包含了书中示例所用到的表结构和数据。这使得读者能够按照书中的...
《Oracle SQL高级编程》是图灵程序设计丛书数据库系列中的一部重要著作,由资深Oracle专家撰写,并得到了OakTable团队的强力推荐。这本书是Oracle开发人员和DBA提升技能、深入理解Oracle SQL不可或缺的参考资料。它...
3. **性能比较**:对比不同时间段或不同版本的SQL执行性能,找出优化空间。 4. **调优建议**:根据收集的数据,提供可能的优化建议,如索引调整、查询改写等。 5. **资源分配**:帮助优化数据库资源分配,减少等待...
使用统一的监控执行时间标准有利于更精确地发现问题,并对比优化前后的效果。 在SQL语句分析部分,文档介绍了常用的SQL分析命令,其中explain命令是最常用的工具之一。通过explain命令可以分析语句执行的开销、优化...
- **统一SQL书写格式**:使用统一的SQL书写格式可以减少Oracle解析SQL所需的时间,并减少共享内存中的冗余信息,进而提高SQL执行效率。 - **SQL语句大小写**:Oracle默认会将小写字母转换为大写,因此建议直接使用...
本文将深入探讨Oracle与SQL Server在常用函数方面的对比,以便开发者能够更好地理解和选择适合特定场景的函数。 ### 数值函数 1. **长度计算** - Oracle使用`LENGTH`函数,而SQL Server使用`DATALENGTH`函数。 -...
14. **性能优化**:讨论SQL性能监控和优化的方法,如执行计划分析、索引优化、查询重写和绑定变量。 15. **高级主题**:可能涉及Oracle特定的特性,如物化视图、分区表、 materialized join views 和其他高级功能。...
【深度对比Oracle与SQL Server】 在信息技术领域,数据库管理系统(DBMS)的选择对企业的信息架构至关重要。Oracle和Microsoft SQL Server是两大主流的关系型数据库管理系统(RDBMS),各自有着广泛的应用。本文...
总结来说,"数据库对比工具(支持sqlserver ,oracle)"是数据库管理员和开发人员不可或缺的辅助工具,它提高了工作效率,减少了因数据结构不一致导致的问题,确保了数据库升级过程的顺利进行。无论是对SQL Server...
可能会涵盖SQL标准与Oracle特性的对比,帮助用户理解如何在Oracle环境中适应和利用SQL的通用性和特殊性。 5. **学习与实践**: 学习SQL和Oracle SQL,不仅要掌握语法,还要通过实际操作来提升技能。可以创建自己...
Oracle SQL语句执行计划是数据库管理系统中非常关键的一部分,它决定了SQL查询如何在数据库中执行,从而直接影响到查询效率和整体系统性能。Oracle数据库通过共享池来存储已解析的SQL语句及其执行计划,以此避免对...
- `SQL*Plus`: Oracle的标准客户端工具,用于执行SQL语句和脚本。 - 命令行启动方式:`c:\orawin95\bin\sqlplus.exe` - **MySQL**: - `mysql`: MySQL的标准客户端工具。 - 命令行启动方式:`c:\mysql\bin\mysql....