很久以前,在我还在X唐电信的时候,我被领导要求优化一段SQL。说真的那个时候我根本不知道SQL的优化为何物,但是百度google之后我发现所有的资料都写有这么一条:把选择性大的条件子句写在最后。因为oracle在执行的时候从底向顶执行。这句话我当时笃信不疑。可是后来我查到更多资料以及对SQL优化有了更深的理解之后,我发现那句话是RBO,而现在的oracle采取CBO。那么SQL到底是不是从下向上执行的?这个疑问后来在一次错误中被解决了。
有这么一个表,叫做test,有两个字段ser_id,area_id。但是我记不住了,我写了以下的SQL:
select * from test
where area_id = 290
and name = 'Lee'
and class_id = '201201';
执行一把:
系统会报错,但是系统不会说“name”也是无效的,只是检测出了class_id无效。这也就是说明,在进行语句的解析时,oracle确确实实是从下向上执行的。那么是不是说把选择性大的条件写到最底下会最快呢?我想这个还是靠执行计划说话。
还是这个test表,现在有12582912条数据,其中area_id=290的数据有4291456条,而ser_id=100001的有2097152条。很明显,area_id=290更具有选择性。好,现在SQL语句1如下:
select * from test
where ser_id = 100001
and area_id = 290;
它的执行计划如下:
将条件反转,在看执行计划:
惊奇的发现两个的执行计划是一样的。但是有点不同,就是物理读。可以看到第一个进行了27次物理读,而第二个SQL没有物理读。我想物理读的产生原因大家都是知道的,这里物理读少了是因为需要的数据是一样的,所以第二次直接从缓存中读出了需要的数据。但是不管物理读如何,两个执行计划是一样的,这就证明了oracle,起码是我本机装的11g,并没有因为条件子句的选择性高低而更改其执行计划。
下面是第二部分,这周学会了一个基本的SQL语句:having。
这个语句很好用,一般用来统计重复数据的时候非常非常好使。比如说我上面那个test表吧,我想知道ser_id=100001这条数据记录重复了多少遍,只需要这样写SQL:
select ser_id, count(*)
from TEST
WHERE ser_id = 100001
group by ser_id
having count(*) > 1;
就能得到结果。
分享到:
相关推荐
标题“Oracle 获取某日期属于一年中的第几个自然周”指的是在Oracle数据库系统中,通过SQL查询来确定一个特定日期在当年是第几周的问题。在实际业务中,这样的功能可能用于统计、报告或者数据分析,例如,公司可能...
一周循环备份oracle数据库,只用修改链接,设置任务管理器就可以. set oracle_username="l_sys" set oracle_password="123456" set local_tnsname="oradb" 修改以上配置,定时执行即可
在Windows 7操作系统中安装Oracle数据库时,可能会...遵循上述步骤和建议,你应该能够克服在Windows 7上安装Oracle时遇到的大部分问题。在安装过程中遇到任何其他困难,都可以查阅Oracle官方文档或在线社区寻求帮助。
标题“Oracle EXP 遇到的问题”涉及到的是在使用Oracle数据库导出工具EXP时遇到的挑战。Oracle EXP,全称Export,是Oracle提供的一种数据导出工具,它允许用户将数据库对象(如表、索引、存储过程等)及其数据导出到...
在使用 Oracle 数据库系统时,可能会遇到一些疑难问题,本文将从解决使用 Oracle SQL*PLUS 时没有监听器的问题开始,介绍一些相关的知识点。 标题:解决使用 Oracle 疑难问题 描述:解决使用 Oracle 中所遇到的...
安装oracle10g遇到问题及解决办法
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着核心地位。"Oracle问题解决大全"很显然是一份集成了各种Oracle数据库...通过不断学习和实践,才能成为一名优秀的Oracle问题解决专家。
Oracle数据库服务的启动问题对于初学者来说可能是一项挑战,但理解并解决这些问题对于确保数据库的正常运行至关重要。本篇文章将详细探讨Oracle服务启动时可能遇到的问题及其解决方案。 首先,Oracle服务的启动问题...
1. **Oracle应用常见傻瓜问题1000问.doc**:这份文档可能包含了一系列Oracle使用过程中遇到的常见问题和解答,涵盖了从安装配置到日常操作的各种问题,对于初学者或经验较少的DBA(数据库管理员)来说,是一份非常...
这类问题通常发生在长时间未使用的连接上,由于缺乏活动导致连接被Oracle认为是闲置状态,进而可能引发一系列错误或性能问题。下面我们将基于提供的文件信息,详细介绍如何解决Oracle遇到连接空闲例程的问题。 ####...
NULL 博文链接:https://chenhongbinjs.iteye.com/blog/1902011
"ORACLE常用问题1000问"很显然是一部针对Oracle数据库常见问题的集锦,旨在帮助用户解决日常运维中可能遇到的各种挑战。通过阅读这部资料,可以深入理解Oracle数据库的工作原理,提高故障排查和性能优化的能力。 ...
这份"oracle数据库使用经验word"文档集成了作者在Oracle数据库使用过程中的学习和实践经验,涵盖了Oracle的基础知识、常见问题解决方案、SQL优化以及性能优化等方面。下面将详细解读这些关键知识点。 1. **Oracle...
在使用LoadRunner进行Oracle 10g性能测试时,可能会遇到一系列的问题,下面将详细讨论这些问题及其解决方案。 问题1:许可证问题 错误信息提示“Error... You do not have a license for this Vuser type”。这意味...
* 创建 Oracle 用户和用户组:创建一个专门的用户和用户组,以便于 Oracle 12C 的安装和运行。 * 创建安装目录:创建一个专门的目录,以便于存储 Oracle 12C 的安装文件。 * Disable SELinux:SELinux 可能会阻止 ...
5. 兼容性问题:在实际应用中,可能会遇到oci.dll版本兼容性的问题。比如,使用Oracle 10G的oci.dll可能无法连接到Oracle 11G数据库,反之亦然。因此,确保oci.dll与Navicat以及目标数据库版本的匹配至关重要。 6. ...
在使用Oracle过程中,用户可能会遇到各种各样的问题,这里我们将深入探讨标题和描述中提到的一些关键知识点。 首先,让我们来看“Oracle常见傻瓜问题”。这通常涉及到初级用户在日常操作中遇到的简单但困扰的问题,...
当遇到性能下降、错误提示或系统异常时,经验集可能会分享如何利用Oracle的错误日志、告警日志、跟踪文件和V$视图来定位问题,以及如何通过重建索引、调整初始化参数或修改SQL语句来解决问题。 最后,文档可能还...