oracle的时间和日期比较功能比较强大,它提供了几个函数:比如to_char()和to_date()
但是如果在sql语句的时间比较中包含这两个函数,那么sql的效率会是非常的底下。
下面是三种时间比较的sql语句:
在sqlplus中
执行:
set timing on;
set autotrace traceonly;
分别执行以下三种语句:
一。SELECT "V_HEADQUARTER_HW_LIST"."ID",
"V_HEADQUARTER_HW_LIST"."RQ_OPTION"
FROM "V_HEADQUARTER_HW_LIST"
WHERE (rq_option >= to_date('2007-09-01', 'yyyy.mm.dd') AND
rq_option < to_date('2007-09-02', 'yyyy.mm.dd'))
结果如下:
172 rows selected.
real: 250
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'W_SHDJ_MX_ZD'
2 1 INDEX (RANGE SCAN) OF 'W_SHDJ_MX_ZD_RQ_OPTION_D
UNIQUE)
Statistics
----------------------------------------------------------
7 recursive calls
0 db block gets
2870 consistent gets
0 physical reads
0 redo size
6350 bytes sent via SQL*Net to client
2076 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
172 rows processed
二。
SELECT "V_HEADQUARTER_HW_LIST"."ID",
"V_HEADQUARTER_HW_LIST"."RQ_OPTION"
FROM "V_HEADQUARTER_HW_LIST"
WHere
(to_char(rq_option, 'yyyy.mm.dd') = '2007.09.01')
结果如下:
172 rows selected.
real: 19656
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'W_SHDJ_MX_ZD'
Statistics
----------------------------------------------------------
7 recursive calls
3 db block gets
207025 consistent gets
107946 physical reads
0 redo size
6350 bytes sent via SQL*Net to client
2015 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
172 rows processed
三。
SELECT "V_HEADQUARTER_HW_LIST"."ID",
"V_HEADQUARTER_HW_LIST"."RQ_OPTION"
FROM "V_HEADQUARTER_HW_LIST"
where
trunc(rq_option, 'DD') = to_date('2007.09.01','yyyy.mm.dd')
172 rows selected.
real: 20531
Execution Plan
---------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'W_SHDJ_MX_ZD'
Statistics
---------------------------------------------------
7 recursive calls
3 db block gets
207022 consistent gets
108024 physical reads
0 redo size
6350 bytes sent via SQL*Net to client
2025 bytes received via SQL*Net from client
15 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
172 rows processed
可以看出,第一种的效率比另外两种高。
但是根据网上有人的测试,第三种的CPU占用比第二中少。
结论是:
涉及到时间的比较最好转化成可以使用索引,避免全表扫描。
分享到:
相关推荐
本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...
3. **建议与改写**:自动提供优化建议,包括修改SQL语句结构、创建或调整索引、优化连接方式等,有时甚至可以直接改写SQL语句以提高性能。 4. **历史记录与报告**:记录SQL语句的执行历史,生成性能报告,便于跟踪...
oracle中SQL语句优化
ORACLEsql语句优化,性能优化,语句技巧优化
### Oracle 查看当前会话执行的SQL语句 在Oracle数据库管理中,有时我们需要了解某个特定会话(Session)正在执行哪些SQL语句。这在性能调优、问题诊断等场景下尤为重要。以下将详细介绍如何通过不同的方法来查看...
### 基于Oracle数据库的SQL语句优化 #### 引言 Oracle数据库是由甲骨文公司开发的一款关系型数据库管理系统,在当前的数据库市场中占据着重要的地位。它广泛应用于商业、政府等领域,具备强大的数据处理能力和高效...
### Oracle数据库设计中SQL语句优化研究 #### 引言 随着信息技术的快速发展,数据库作为信息系统的核心组件之一,在各类业务场景中的应用越来越广泛。Oracle数据库因其高性能、高可靠性等特点成为了许多企业的首选...
在Oracle数据库管理与维护过程中,有时候我们需要了解应用程序正在执行哪些SQL语句,这不仅有助于性能优化,还可以帮助我们诊断潜在的问题。通过监听执行SQL语句的方式,我们可以获取到当前会话正在执行的具体SQL...
### ORACLE数据库优化之SQL语句的并行处理 #### SQL语句并行处理的重要性与优势 在现代信息系统的高效运作中,数据库的性能优化至关重要,尤其是面对大规模数据集时。Oracle数据库作为企业级数据库解决方案的佼佼...
2. **SQL语句优化技巧**: - **选择适当的WHERE子句**:使用索引来提高查询速度,避免全表扫描。 - **使用绑定变量**:避免SQL注入,提高执行计划的重用率。 - **减少数据访问**:精确选择需要的列,避免SELECT *...
在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA(数据库管理员)和开发人员识别性能瓶颈,改善查询效率,并确保系统的稳定运行。 SQL Monitor通过收集和展示SQL语句...
本文将深入探讨如何利用压力测试工具来评估和优化Oracle数据库中的SQL语句性能。 标题"压测Oracle的SQL语句的性能情况"暗示了我们关注的是在高负载情况下,Oracle数据库处理SQL查询的能力。压力测试(Pressure ...
### Oracle数据库的SQL语句优化详解 #### 一、Oracle的Optimizer及其相关知识 Oracle数据库在执行SQL语句前,会先分析语句的执行计划,这一过程由**优化器**(Optimizer)完成。优化器根据不同的情况为每条SQL语句...
Oracle SQL语句性能优化是数据库管理中的关键环节,直接影响到系统的响应速度和资源利用效率。本文将详细探讨优化Oracle SQL语句的几个核心策略。 1. 选择合适的优化器 Oracle 提供了三种优化器:RULE(基于规则)...
### Oracle SQL语句优化规则详解 #### 一、选择正确的优化器 在Oracle数据库中,SQL语句的执行效率很大程度上取决于所选的优化器。Oracle提供了三种优化器模式: 1. **基于规则的优化器(RULE)**:这是Oracle...
描述对sql语句的优化达到优化oracle的目的