返回顶部
首页 > 资讯 > 数据库 >ORACLE访问数据的方法
  • 354
分享到

ORACLE访问数据的方法

2024-04-02 19:04:59 354人浏览 薄情痞子
摘要

   这篇是整理复习oracle关于访问表数据的方法,在oracle数据库中,要想访问存储在数据库中的数据,要依次经历下面几个步骤:待执行的sql ----> 解析 ---->


   这篇是整理复习oracle关于访问表数据的方法,在oracle数据库中,要想访问存储在数据库中的数据,

要依次经历下面几个步骤:

待执行的sql ----> 解析 ----> 优化器处理 ----> 生成执行计划 ----> 实际执行 ----> 返回执行结果,

其中,在优化器的处理这个阶段,来决定访问目标表数据的方式,即优化器要采用什么方式去访问具体

的数据。

   在oracle中访问表的方式分为两种,一种是直接访问表,一种是先访问索引,再回表(当然,还有可能

只访问索引就可以得到数据,这样的话,就不需要回表了)。

 

下面就分别整理出上述两种访问表中数据的方法。


1.访问表的方法

  直接访问表中数据的方法有两种: 全表扫描和ROWID扫描。


1.1 全表扫描

  oracle在访问目标表里面的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫

描,一直扫描到该表的高水位线(HWM,High Water Mark),最后返回满足where条件的数据。

  析:全表扫描时候会使用多块读,在目标表数据量不大的时候,效率是很高的,但问题在于,全表扫

描执行时间不稳定、不可控,执行时间会随着数据量递增而递增;


1.2 ROWID扫描

  rowid扫描是指oracle在访问数据时,是通过数据所在的物理存储地址去定位并访问数据。

对于oracle里的堆表来说,可通过oracle内置的rowid伪列得到对应行记录所在的rowid的值。然后通过

DBMS_ROWID包里面的相关方法将rowid伪列翻译成为对应数据行的实际物理存储地址,如下

select empno,ename,rowid,dbms_rowid.rowid_relative_fno(rowid)||'_'||

dbms_rowid.rowid_block_number(rowid)||'_'||dbms_rowid.rowid_row_number(rowid)

from emp;


2.访问索引的方法

  这里说的是oracle数据库中最常用的B树索引,B树索引类似一颗倒长的树,包含两种类型的数据块,

一种是索引分支块,一种是索引叶子块。

  B树索引的优势有三点

  a. 所有索引叶子块层在同一层,它们距离索引根节点的深度相同,意思就是访问索引叶子块的任何

索引键值所花费的时间几乎相同;

  b. oracle会保证所有的B树索引都是自平衡的,不可能出现不同的索引叶子块不处于同一层的现象;

  c. 通过B树索引访问表里记录的效率并不会随着相关表的数据量的递增而明显降低,也就是说通过

走索引访问数据的时间是可控的、基本稳定的,这也是走索引和全表扫描的最大区别;


下面是oracle里面的常见的访问B树索引的方法介绍


2.1   索引唯一性扫描

  索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)的扫描,不过呢它仅

仅适用于where条件里等值查询类SQL,由于扫描对象是唯一性索引,所以扫描结果至多返回一条记

录。


2.2 索引范围扫描

  索引范围扫描(INDEX RANGE SCAN)适用于所有类型的B树索引,当扫描对象是唯一性索引时,目

标SQL的where条件一定是范围查询(谓词条件为BETWEEN、<、>等);当扫描对象是非唯一性索引

时候,对目标SQL的where条件没有限制(可以是等值查询,也可以是范围查询)。


2.3 索引全扫描

  索引全扫描(INDEX FULL SCAN)适用于所有类型的B树索引,指的是要扫描目标索引所有必要分支

块下的叶子块的所有索引行。默认情况下,oracle在做索引全扫描时候只需要通过访问定位到位于该

索引最左边的叶子块的第一行索引行,然后利用该索引叶子块之间的双向指针链表,从左到右依次顺

序扫描该索引所有叶子块的所有索引行。

  索引全扫描的前提条件是,目标索引至少有一个索引键值列的属性是NOT NULL。

  默认情况下,索引全扫描要从左到右依次顺序扫描目标索引所在叶子块的所有索引行,由于索引是

有序的,所以索引全扫描的执行结果也是有序的,并且是按照索引的索引键值列来排序,由此可见,

走索引全扫描在能够达到排序的效果,同时避免了对该索引的索引键值列的真正排序操作,这个情况

可以在SQL时,在索引全扫描的执行计划中查看sorts(memory),sorts(disk)是否为0来确认。

  索引全扫描的结果有序性,决定了索引全扫描不能并行执行,并且通常情况下是单块读。


2.4索引快速全扫描

  索引快速全扫描(INDEX FAST FULL SCAN)和索引全扫描类似,有如下几个区别:

  a. 只适用于CBO

  b. 可以使用多块读,也可以并行执行

  c. 执行结果不一定是有序的


2.5索引跳跃式扫描

  索引跳跃式扫描(INDEX SKIP SCAN)适用于所有类型的复合B树索引(包括唯一性索引和非

唯一性索引),跳跃的意思是,比如表DEMO1有字段(gender varchar2(1),id number not null),然

后给该表创建一个复合B树索引如下

create index idx_xxx on demo1(gender,id);

然后给表以下面形式插入多行记录

begin

for i in 1..5000 loop

insert into demo1 values('F',i);

end loop

commit;

end;

/


begin

for i in 5001..10000 loop

insert into demo1 values('M',i);

end loop

commit;

end;

/

然后,打开执行计划执行一条查询

set autotrace traceonly

select * from demo1 where id = 100;

在执行计划中可以看到用上了索引idx_xxx

而上面where条件是id=100,即它只对复合索引的第二列指定了查询条件,并没有对前导列

指定查询条件,这就是索引跳跃扫描的情况。其实这个是oracle会对前导列的所有distinct值

做遍历。

  索引跳跃式扫描效率会随着目标索引前导列的distinct值的递增而效率递减,所以它仅适用

于目标索引的前导列的distinct值数量较少、后续非前导列的可选择性又非常好的情况下。


表的表数据的方法这块到此整理完毕,后续有时间最好能每个点都举例来整理。



您可能感兴趣的文档:

--结束END--

本文标题: ORACLE访问数据的方法

本文链接: https://lsjlt.com/news/45536.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ORACLE访问数据的方法
       这篇是整理复习oracle关于访问表数据的方法,在oracle数据库中,要想访问存储在数据库中的数据,要依次经历下面几个步骤:待执行的SQL ----> 解析 ---->...
    99+
    2024-04-02
  • 访问数据的方法
        对于优化器而言,它在解析目标SQL,得到执行计划时至关重要的一点是决定访问数据的方法,即优化器要决定采用什么样的方式和方法去访问目标SQL所需要访问的存储在o...
    99+
    2024-04-02
  • Oracle数据访问组件ODAC的安装方法
    Oracle 数据访问组件ODAC(Oracle Data Access Components)顾名思义就是用来访问Oracle数据库的小程序。我们可以编程调用这些组件来实现在没有安装Oracle数据库软...
    99+
    2024-04-02
  • 【方法】如何限定IP访问Oracle数据库
    【方法】如何限定IP访问Oracle数据库 1.1  BLOG文档结构图 1.2  前言部分1.2.1  导读和注意事项各位技术爱好者,看完本文后,你可以掌...
    99+
    2024-04-02
  • oracle数据库访问
    1: 装上ODBC-oracle驱动之后,配置数据源的时候,用给的用户名和密码,弹出错:unable to connect SQLState=28000[oracle][ODBC][Ora]ORA-0101...
    99+
    2024-04-02
  • .Net ORM 访问 Firebird 数据库的方法
    目录前言1、安装环境2、创建项目3、创建实体模型4、初始化 ORM5、插入数据6、更新数据7、查询数据8、删除数据结语前言 Firebird 是一个跨平台的关系数据库系统,目前能够运...
    99+
    2024-04-02
  • Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
    本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL、Oracle、SQL Server数据库。 其中包括以下几个软件的安装及配置: un...
    99+
    2022-06-04
    数据库 方法 MySQL
  • java访问数据库的方法有哪些
    Java访问数据库的方法有以下几种:1. JDBC(Java Database Connectivity):JDBC是Java访问数...
    99+
    2023-09-22
    数据库 java
  • php访问数据库的方法有哪些
    在PHP中,可以使用以下几种方法来访问数据库:1. 使用MySQLi扩展:MySQLi扩展是PHP官方推荐的访问MySQL数据库的方...
    99+
    2023-10-10
    php 数据库
  • VB中数据库访问的方法有哪些
    在VB中,可以使用以下方法来访问数据库: ADO(ActiveX Data Objects):ADO是一种用于访问数据库的COM...
    99+
    2024-04-03
    VB
  • PostgreSQL通过oracle_fdw访问Oracle数据
    背景: 同一个项目两个系统分别使用了PG库和Oracle库,Oracle是生产库,数据动态更新,现在在PG库中需要实时的获取到更新的数据进行统计,基于此种方式,可以通过ETL的工具实现,但是需要定期进行维护等,于是想着是否可以通过类似于O...
    99+
    2016-10-07
    PostgreSQL通过oracle_fdw访问Oracle数据
  • SpringBoot数据访问自定义使用Druid数据源的方法
    数据访问之Druid数据源的使用 说明:该数据源Druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主。 为什么要使用数据源: ​数据源是提高数...
    99+
    2024-04-02
  • java换成ip访问数据库无法访问
    一.错误现象 1.1 问题描述 springboot使用双数据源:本意是从第一个数据库中查询导数据然后加入另外一个数据库,代码一切正常后运行结果如下报错, 仔细一排查发现数据是查询到的,说明是入数据的库出问题了,结果发现我之前连接的时候是用...
    99+
    2021-09-19
    java换成ip访问数据库无法访问 数据库入门 数据库基础教程 数据库 mysql
  • docker部署访问postgres数据库的实现方法
    目录部署与访问启用日志如果需要修改pg配置重启pg代码&外部连接时注意(温馨提示)部署与访问 宿主机创建postgres用户: adduser postgres 拉取镜像,...
    99+
    2024-04-02
  • plsql访问远程数据库的方法是什么
    PL/SQL可以通过以下几种方法访问远程数据库:1. 使用数据库链接(Database Link):数据库链接是PL/SQL中访问远...
    99+
    2023-10-18
    plsql 数据库
  • Python通过跳板机访问数据库的方法
    什么是跳板机? 跳板机(Jump Server):也称堡垒机,是一类可作为跳板批量操作的远程设备的网络设备,是系统管理员和运维人员常用的操作平台之一。 那么具体是做什么的呢? 现在一...
    99+
    2024-04-02
  • 访问数据库阿里云的优势与方法
    访问数据库是任何在线应用程序的基础,它允许用户访问和操作存储在服务器上的数据。对于企业和个人开发者来说,选择合适的数据库管理系统至关重要。本文将探讨阿里云访问数据库的方法和优势。 阿里云是全球领先的云计算服务平台,拥有丰富的数据库产品和服务...
    99+
    2023-11-05
    阿里 优势 数据库
  • Python中怎么访问Oracle数据库
    Python中怎么访问Oracle数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。查询通常有两种方式:一种是使用cursor.fetchall()获取所有查询结果,然后再一...
    99+
    2023-06-04
  • oracle中访问索引的方法有哪些
    这篇文章主要介绍“oracle中访问索引的方法有哪些”,在日常操作中,相信很多人在oracle中访问索引的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle...
    99+
    2024-04-02
  • Oracle配置dblink访问PostgreSQL的操作方法
    Oracle dblink的底层是通过ODBC连接PostgreSQL执行SQL的,需安装unixODBC和PostgreSQL ODBC驱动(它们的配置文件是:odbcinst.i...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作