oracle查询指定索引提高查询效率
一个1600万数据表--短信上行表tbl_sms_mo
结构:
create table tbl_sms_mo
(
sms_id number,
mo_id varchar2(50),
mobile varchar2(11),
spnumber varchar2(20),
message varchar2(150),
trade_code varchar2(20),
link_id varchar2(50),
gateway_id number,
gateway_port number,
mo_time date default sysdate
);
create index idx_mo_date on tbl_sms_mo (mo_time)
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 1m
next 1m
minextents 1
maxextents unlimited
pctincrease 0
);
create index idx_mo_mobile on tbl_sms_mo (mobile)
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64k
next 1m
minextents 1
maxextents unlimited
pctincrease 0
);
问题:从表中查询某时间段内某手机发送的短消息,如下sql语句:
select mobile,message,trade_code,mo_time
from tbl_sms_mo
where mobile=’130xxxxxxxx’
and mo_time between to_date(’2006-04-01’,’yyyy-mm-dd hh24:mi:ss’) and to_date(’2006-04-07’,’yyyy-mm-dd hh24:mi:ss’)
order by mo_time desc
返回结果大约需要10分钟,应用于网页查询,简直难以忍受。
分
析:
在pl/sql developer,点击“explain plan”按钮(或f5键),对sql进行分析,发现缺省使用的索引是
idx_mo_date。问题可能出在这里,因为相对于总数量1600万数据来说,都mobile的数据是很少的,如果使用idx_mo_mobile比
较容易锁定数据。
如下优化:
select /*+ index(tbl_sms_mo idx_mo_mobile) */ mobile,message,trade_code,mo_time
from tbl_sms_mo
where mobile=’130xxxxxxxx’
and mo_time between to_date(’2006-04-01’,’yyyy-mm-dd hh24:mi:ss’) and to_date(’2006-04-07’,’yyyy-mm-dd hh24:mi:ss’)
order by mo_time desc
分享到:
相关推荐
在Oracle数据库管理与优化领域,提高查询效率是至关重要的一个环节。这不仅能够显著提升应用程序的性能,还能减少数据库服务器的负载,从而为用户提供更流畅的服务体验。本文将结合提供的SQL示例,深入探讨如何通过...
总的来说,Oracle 9i 的索引跳跃式扫描是一个为了提高查询效率而设计的优化策略,尤其适合那些部分匹配索引列的查询。尽管它可能不如直接索引查找快,但相比全表扫描,它提供了显著的性能提升。在实际应用中,数据库...
尽管索引可以显著提高查询效率,但在某些特定情况下,Oracle可能会选择不使用索引: 1. **优化器模式**:首先确认当前数据库处于哪种优化器模式。可以通过运行`show parameter optimizer_mode`命令来查看。Oracle ...
- **对查询优化的影响**:这些统计信息有助于Oracle优化器更好地理解系统的运行状态,从而选择更为合理的执行计划,最终提高查询效率。 #### 2.2 如何收集操作系统统计信息 - **使用DBMS_STATS包**:Oracle提供了一...
在数据库中,索引可以加速对表中数据的访问,特别是对于那些频繁进行查询操作的列,创建索引能够显著提高查询速度。 Oracle支持多种类型的索引,包括B树索引、位图索引、函数索引和唯一索引等。B树索引是最常见的...
Oracle索引的访问方法是一种数据库优化技术,旨在提高查询速度和数据检索效率。索引是一种数据结构,它可以快速定位和检索数据库中的数据。Oracle索引的访问方法包括创建索引、查询索引、使用索引等。 一、创建索引...
5. **使用DECODE函数**:DECODE函数可以减少重复扫描或连接,通过直接返回预计算的结果,从而提高查询速度。 6. **合并简单查询**:即使没有直接关联,也可以尝试将多个简单查询合并为一个,以减少数据库交互。 7....
### Oracle全文索引详解 ...总之,Oracle Text为用户提供了强大而灵活的全文检索能力,极大地提高了基于文本的数据查询效率。通过对全文索引的合理设计和有效使用,可以显著提升应用程序的性能和用户体验。
本文将结合具体实例,介绍如何通过优化 SQL 语句来提高查询效率。 #### 一、Leading 提示与 Use_NL 提示 在进行多表连接查询时,可以通过指定 `/*+LEADING(TABLE)*/` 和 `/*+USE_NL(TABLE)*/` 来引导 Oracle 的...
1. 创建索引:使用CREATE INDEX语句创建全文索引,指定索引类型(如CTX),并提供包含文本数据的列名。 2. 分析索引:创建索引后,使用DBMS_INDEXAnalyzer进行分析,以优化索引性能。 三、全文检索语法 1. 使用...
这种类型的索引可以在某些情况下提高查询效率。例如,在Oracle 9i版本之前,如果一个组合索引的第一个列没有出现在WHERE子句中,那么Oracle将无法利用这个索引来加速查询。具体来说,假设有一个表`emp`,其中包含一...
3. **优化目标**:通过调整数据库配置、改进查询逻辑等方式来提高查询效率和响应速度。 #### 二、Oracle数据库查询统计速度的影响因素 - **硬件资源**:包括CPU处理能力、内存大小以及磁盘I/O速度等因素都会直接...
其中,**强制索引**是一种重要的优化手段,它允许数据库管理员或开发人员指定特定的执行计划,确保查询能够利用预设的索引来提高查询速度。本文将详细探讨Oracle中的各种强制索引技巧及其应用场景。 #### 一、`/*+...
3. **使用EXISTS代替IN**:将原SQL语句中的IN子句替换为EXISTS子句,以减少不必要的全表扫描,提高查询性能。 #### 强制索引提示的应用 即使在上述优化后,`Person`表在外层查询中仍然采用全表扫描,未充分利用...
重写这些查询语句,使用 EXISTS 或 JOIN 来替代,通常能够提高查询的效率。 案例分析是理解这些技巧的最佳途径。在本文件中,作者会通过具体的案例来演示每一种优化技巧的应用。通过这些实际案例,读者不仅可以学习...
查询优化是指在数据库管理系统(DBMS)中选择执行SQL语句的最佳方式,以最小化资源消耗并提高查询性能的过程。它涉及到多个方面,如索引使用、连接策略、表扫描方法等。 #### 1.2 为什么需要查询优化 - **提升系统...
例如,在`SELECT * FROM tab1,tab2`这样的查询中,如果tab2的记录数远少于tab1,那么将tab2放在前面可以提高查询效率。 2. **WHERE子句的连接顺序**:Oracle自下而上解析WHERE子句,所以应将过滤最多记录的条件放在...
总结,Oracle查询优化改写是数据库管理中的核心技能,通过深入理解SQL语句、索引、表设计和参数设置,我们可以有效地提高查询性能,提升整体系统效率。在实际工作中,需要结合具体业务场景,灵活运用这些技巧,以...
- **外层查询**: `select * from people where peopleid in (...)` 这部分从`people`表中选取所有字段,其中`WHERE`子句指定只有当`peopleid`出现在子查询的结果中时才选择该行,即选择了所有重复的记录。...