iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >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://www.lsjlt.com/news/45536.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .Net ORM 访问 Firebird 数据库的方法
    目录前言1、安装环境2、创建项目3、创建实体模型4、初始化 ORM5、插入数据6、更新数据7、查询数据8、删除数据结语前言 Firebird 是一个跨平台的关系数据库系统,目前能够运...
    99+
    2024-04-02
  • php访问数据库的方法有哪些
    在PHP中,可以使用以下几种方法来访问数据库:1. 使用MySQLi扩展:MySQLi扩展是PHP官方推荐的访问MySQL数据库的方...
    99+
    2023-10-10
    php 数据库
  • java访问数据库的方法有哪些
    Java访问数据库的方法有以下几种:1. JDBC(Java Database Connectivity):JDBC是Java访问数...
    99+
    2023-09-22
    数据库 java
  • VB中数据库访问的方法有哪些
    在VB中,可以使用以下方法来访问数据库: ADO(ActiveX Data Objects):ADO是一种用于访问数据库的COM...
    99+
    2024-04-03
    VB
  • SpringBoot数据访问自定义使用Druid数据源的方法
    数据访问之Druid数据源的使用 说明:该数据源Druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主。 为什么要使用数据源: ​数据源是提高数...
    99+
    2024-04-02
  • plsql访问远程数据库的方法是什么
    PL/SQL可以通过以下几种方法访问远程数据库:1. 使用数据库链接(Database Link):数据库链接是PL/SQL中访问远...
    99+
    2023-10-18
    plsql 数据库
  • Python通过跳板机访问数据库的方法
    什么是跳板机? 跳板机(Jump Server):也称堡垒机,是一类可作为跳板批量操作的远程设备的网络设备,是系统管理员和运维人员常用的操作平台之一。 那么具体是做什么的呢? 现在一...
    99+
    2024-04-02
  • docker部署访问postgres数据库的实现方法
    目录部署与访问启用日志如果需要修改pg配置重启pg代码&外部连接时注意(温馨提示)部署与访问 宿主机创建postgres用户: adduser postgres 拉取镜像,...
    99+
    2024-04-02
  • 访问数据库阿里云的优势与方法
    访问数据库是任何在线应用程序的基础,它允许用户访问和操作存储在服务器上的数据。对于企业和个人开发者来说,选择合适的数据库管理系统至关重要。本文将探讨阿里云访问数据库的方法和优势。 阿里云是全球领先的云计算服务平台,拥有丰富的数据库产品和服务...
    99+
    2023-11-05
    阿里 优势 数据库
  • Python中怎么访问Oracle数据库
    Python中怎么访问Oracle数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。查询通常有两种方式:一种是使用cursor.fetchall()获取所有查询结果,然后再一...
    99+
    2023-06-04
  • Oracle配置dblink访问PostgreSQL的操作方法
    Oracle dblink的底层是通过ODBC连接PostgreSQL执行SQL的,需安装unixODBC和PostgreSQL ODBC驱动(它们的配置文件是:odbcinst.i...
    99+
    2024-04-02
  • oracle中访问索引的方法有哪些
    这篇文章主要介绍“oracle中访问索引的方法有哪些”,在日常操作中,相信很多人在oracle中访问索引的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle...
    99+
    2024-04-02
  • 访问phpmyadmin的方法
    小编给大家分享一下访问phpmyadmin的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!怎么访问phpmyadmin?1....
    99+
    2024-04-02
  • C#与数据库访问技术之ExecuteNonQuery方法
    在C#中,ExecuteNonQuery方法是用于执行SQL语句并返回受影响的行数的方法。它可以用于执行INSERT、UPDATE和...
    99+
    2023-09-15
    C#
  • Python访问MySQL数据库速度慢的解决方法
    本篇内容介绍了“Python访问MySQL数据库速度慢的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python可以做什么Pyth...
    99+
    2023-06-14
  • 使用genymotion访问本地上Tomcat上数据的方法
    首先 当然是启动genymotion然后Tomcat ,启动tomcat。。如图将请求的URL地址变为10.0.3.2 ,比如在电脑上访问的是http://localhost:8080/ 那么在genymotion模拟器上就要输入http:...
    99+
    2023-05-31
    genymotion 访问 tomcat
  • oracle怎么访问另一个数据库
    在Oracle中,可以使用数据库链接(Database Link)来访问另一个数据库。下面是使用数据库链接访问另一个数据库的步骤: ...
    99+
    2024-04-09
    oracle 数据库
  • Oracle数据库怎么限制IP访问
    这篇文章主要介绍了Oracle数据库怎么限制IP访问,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概述本文将会给大家介绍在Oracle数据库该如何限制某个IP访问,或者限...
    99+
    2023-06-27
  • Spring访问数据库异常的处理方法是什么
    Spring访问数据库异常的处理方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用JDBC API时,很多操作都要声明抛出java.sql.SQLExceptio...
    99+
    2023-06-17
  • 织梦CMS数据库访问权限设置方法
    Title: 织梦CMS数据库访问权限设置方法,需要具体代码示例 在网站开发中,数据库权限设置是非常重要的一环,尤其对于织梦CMS(DedeCMS)这样的内容管理系统来说更是必不可少。...
    99+
    2024-03-14
    数据库访问 权限设置 织梦cms
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作