iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >访问数据的方法
  • 883
分享到

访问数据的方法

2024-04-02 19:04:59 883人浏览 泡泡鱼
摘要

    对于优化器而言,它在解析目标sql,得到执行计划时至关重要的一点是决定访问数据的方法,即优化器要决定采用什么样的方式和方法去访问目标SQL所需要访问的存储在o

    对于优化器而言,它在解析目标sql,得到执行计划时至关重要的一点是决定访问数据的方法,即优化器要决定采用什么样的方式和方法去访问目标SQL所需要访问的存储在oracle数据库中的数据。

    目标SQL所需要访问的数据一般存储在表里,而oracle访问表中数据的方法有两种:一种直接访问表,另一种是先访问索引,在回表(当然,如果目标sql所要访问的数据只通过访问相关的索引就可以得到,那么此时就不需要回表了)

    oracle数据库中直接方位表中数据的方法有两种:一是全表扫描,而是rowid扫描

1. 全表扫描

    全扫描时指oracle在访问目标表里数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位线(HWM),这段范围内所有的数据块oracle都必须读到。当然oracle会对这期间读到的所有数据施加目标SQL的where条件中指定的条件,最后只返回那些满足过滤条件的数据。

    不是全表扫描不好,事实上oracle在做全表扫描操作时会使用多块读,这在目标表的数据量不大时执行效率是非常高的,但全表扫描最大问题就在于走全表扫描的目标sql的执行时间不稳定,不可控,这个执行时间一定会随着目标表数据量的递增而递增。因为随着目标表数据量的递增,它的高水位线会一直不断上涨,所以全表扫描该表时所需要读取的数据块的数量也不断增加,这意味着全表扫描该表时所需要耗费的I/O资源随之不断增加,当然完成对该表的全扫描所需要耗费的时间也会随之增加。另外,对于CBO而言,所要耗费I/O资源不断增加意味着全表扫描的成本值也会随着目标表数据量的递增而递增。

    在oracle中,如果对目标表不停地插入数据,当分配给该表的现有空间不足时高水位线就会向上移动,但如果你用delete语句从该表中删除数据,则高水位线并不会随之往下移动。高水位线的这种特性带来的负作用是,即使使用delete语句删除所有数据,高水位线还是再原来的位置,这意味这个全表扫描该表时还是需要扫描该表高水位线下的所有数据块,所以此时对该表的全表扫描操作所耗费的时间与之前相比不会有明细的改善。

2.ROWID扫描

    ROWID扫描是指oracle在访问目标表里的数据时,直接通过数据所在的rowid去定位并访问这些数据。rowid表示的是oracle的数据行记录所在物理存储地址,也就是说rowid实际上是和oracle中数据块里的行记录一一对应的。

    既然rowid代表的就是表的数据行所在的物理存储地址,那么当oracle知道待访问的数据行所在rowid后,自然就可以根据rowid去直接访问对应表的相关数据行,这就是rowid的定义。

    从严格意思来说,oracle中rowid扫描有两层含义:一种是根据用户在sql语句中输入rowid的值直接访问对应的数据行记录;另一种是先去访问相关的索引,然后根据访问索引后得到的rowid再回表去访问对应的行记录。

    对oralce中堆表而言,我们可以通过内置的rowid伪劣得到对应行记录所在的rowid的值(注意,这个rowid只是一个伪劣,在实际的表块中并不存在该列)然后我们可以通过dbms_rowid包中的相关方法(dbms_rowid.rowid_relative_fno,dbms_rowid.rowid_block_number和dbms_rowid.rowid_row_number)将上述伪列的值翻译成对应数据行的实际物理存储地址。

SQL> select empno,ename,rowid,dbms_rowid.rowid_relative_fno(rowid)||'_'||dbms_rowid.rowid_block_number(rowid)||'_'||dbms_rowid.rowid_row_number(rowid) location from emp;


     EMPNO ENAME      ROWID LOCATION

---------- ---------- ------------------ --------------------------------------------------

      7369 SMITH      AAAVREAAEAAAACXAAA 4_151_0

14 rows selected.

    从上述显示内容可以看出,empno为7369的行记录所对应的rowid伪列的值为“AAAVREAAEAAAACXAAA ”,使用dbms_rowid包对该列翻译后的值为4_151_0,这表是empno为7369的行记录实际的物理存储地址位于4号文件第151个数据块的第0行记录(数据块里数据行记录的记录号从0开始算起)

    上述rowid伪列的值是可以直接在sql语句中where条件中使用的,这就是oralce中rowid扫描的两层含义中第一种,根据用户在sql语句中输入的rowid的值直接去访问数据行记录。

    

SQL> select empno,ename from emp where rowid='AAAVREAAEAAAACXAAL';

     EMPNO ENAME

---------- ----------

      7900 JAMES


您可能感兴趣的文档:

--结束END--

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

本文链接: https://www.lsjlt.com/news/40657.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
    阿里 优势 数据库
  • 访问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
  • Spring访问数据库异常的处理方法是什么
    Spring访问数据库异常的处理方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用JDBC API时,很多操作都要声明抛出java.sql.SQLExceptio...
    99+
    2023-06-17
  • 织梦CMS数据库访问权限设置方法
    Title: 织梦CMS数据库访问权限设置方法,需要具体代码示例 在网站开发中,数据库权限设置是非常重要的一环,尤其对于织梦CMS(DedeCMS)这样的内容管理系统来说更是必不可少。...
    99+
    2024-03-14
    数据库访问 权限设置 织梦cms
  • 数据库访问控制:数据安全的秘密处方
    在当今以数据为中心的时代,保护数据库安全至关重要。数据库访问控制 (DAC) 是确保仅授权用户可以访问和修改数据的一项关键安全措施。 DAC 原则 DAC 遵循“最小特权”原则,该原则指出用户只能获得执行其工作职责所需的确切权限。这限制...
    99+
    2024-04-02
  • 访问云服务器上的数据库命令有哪些方法和方法
    NFS客户端:NFS客户端可以挂载到Linux系统的服务器上,通过该客户端可以访问NFS服务器上的数据库。使用NFS客户端需要在Linux系统上安装NFS客户端,并且需要提供一个NFS服务器地址。 挂载文件系统:使用挂载文件系统可以将NF...
    99+
    2023-10-27
    方法 器上 命令
  • MySQL数据库可以用任意ip连接访问的方法
    通过CMD命令行修改数据库表的一个字段的值,实现连接,访问。 第一步、找到MYSQL软件安装所在的bin目录; (1)cd\当前目录 (2)指定MYSQL安装的bin目录 (3)...
    99+
    2024-04-02
  • 阿里云访问用户数据库错误的解决方法
    在使用阿里云访问用户数据库时,如果出现错误,可能会导致数据丢失或系统无法正常运行。本文将详细介绍如何解决阿里云访问用户数据库错误。 在使用阿里云访问用户数据库时,如果出现错误,可能会导致数据丢失或系统无法正常运行。这种情况下,用户需要了解错...
    99+
    2023-11-14
    阿里 解决方法 错误
  • Python通过跳板机访问数据库的方法是什么
    本篇内容主要讲解“Python通过跳板机访问数据库的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python通过跳板机访问数据库的方法是什么”吧!什么是跳板机?跳板机(Jump Se...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作