【赵渝强老师】崖山数据库的行地址ROWID

简介: 崖山数据库ROWID伪列高度兼容Oracle,仅适用于HEAP堆表,代表行物理存储地址,为16字节二进制类型。支持SELECT查询与快速定位,但不可INSERT/UPDATE;提供DBMS_ROWID包解析,分布式场景不支持。(239字)

b475.png

崖山数据库的ROWID高度兼容Oracle语法,是HEAP堆表的伪列,代表行的物理存储地址,同时也是一种原生数据类型。

⚠️ 仅支持HEAP堆表;列存表、分布式部署场景不支持ROWID伪列。


视频讲解如下:


1. 基础概念

  • 伪列:不在表的字段定义中,select *不会返回,必须显式写select rowid查询;不能insert/update修改ROWID伪列。
  • 数据类型:ROWID类型固定占16字节二进制;UROWID通用ROWID变长1‑8000字节,用来存ROWID二进制,等价RAW类型。
  • 输出格式示例:1350:5:0:148:0,冒号分隔,和Oracle的18位Base64字符串格式不一样。

Oracle输出:AAAW78AABAAAFWXAAA(Base64串)

YashanDB输出:对象ID:文件号:段:块号:块内行号


2. ROWID结构

输出格式:ObjectId:FileId:SegId:BlockId:SlotId

配套包DBMS_ROWID,提供函数解析rowid,获取块号、文件号、行槽号,用法和Oracle的DBMS_ROWID兼容,分布式集群不可用。


3. 核心特性

  • 仅HEAP堆表生效:列存表、分布式表不能使用ROWID伪列;单机/共享集群HEAP表可用。
  • ROWID会变化的场景
  • 更新导致行迁移、行溢出;
  • ALTER TABLE MOVE、表重组、收缩;
    删除后新插入行可能复用旧ROWID。
  • 同一张HEAP表内部ROWID唯一;不同表ROWID可以重复,不能跨表做对比。
  • 可以把ROWID作为普通字段类型,建表时定义列类型为ROWID,用来存储行地址;Oracle不允许把ROWID作为字段类型,这是一个重要差异。
  • MySQL兼容模式下,伪列别名是__ysmy_rowid,Oracle模式直接使用ROWID关键字。


4. 常用SQL示例

-- 查询rowid伪列(Oracle兼容模式)
SQL> select rowid,deptno,dname from dept;
ROWID                                              DEPTNO DNAME         
-------------------------------------------- ------------ ------------- 
2821:4:0:132:0                                         10 ACCOUNTING   
2821:4:0:132:1                                         20 RESEARCH     
2821:4:0:132:2                                         30 SALES        
2821:4:0:132:3                                         40 OPERATIONS   
4 rows fetched.

-- 根据rowid快速定位行,查询性能极高
SQL> select deptno,dname from dept where rowid='2821:4:0:132:2';
      DEPTNO DNAME         
------------ ------------- 
          30 SALES        
1 row fetched.
相关文章
|
10月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL锁的类型
PostgreSQL通过表级锁和行级锁实现并发控制,结合MVCC机制保障数据一致性。锁模式多样,粒度精细,可有效避免事务冲突,提升并发性能。
453 0
【赵渝强老师】PostgreSQL锁的类型
|
6月前
|
关系型数据库 MySQL Java
【赵渝强老师】MySQL数据库的分库与分表
Mycat是一款开源分布式数据库中间件,支持MySQL等主流数据库,提供分库分表、读写分离、逻辑库/表抽象等功能。本文详解其核心概念(如分片表、ER表、全局序列号)、安装部署(JDK配置、服务启停)及实战配置(schema.xml/rule.xml),并演示基于三节点MySQL的分片数据路由与查询。
423 31
|
6月前
|
网络协议 Java 数据格式
【赵渝强老师】Docker容器的跨节点通信
本文详解Docker容器跨主机通信的三种方案,重点介绍基于Overlay网络的实现:通过ZooKeeper注册中心配置Docker集群,创建overlay网络,使不同主机上的容器能用虚拟IP直接互通,并提供完整部署步骤与验证方法。(239字)
541 3
|
9月前
|
SQL 存储 分布式计算
【赵渝强老师】基于Hudi的大数据湖仓一体架构
Apache Hudi(Hadoop Upserts Delete and Incremental)是开源的流式数据湖平台,支持事务、高效upsert/delete、增量处理、多引擎SQL读写(Spark/Flink/Trino等),自动管理小文件与压缩,兼容云存储,助力构建湖仓一体架构。
1200 3
|
9月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle多租户容器数据库
Oracle 12c引入多租户容器数据库(CDB),支持在一个数据库服务器上管理多个可插拔数据库(PDB),提升资源利用率,降低成本。CDB由根容器、PDB种子和多个PDB组成,可通过DBCA或SQL脚本创建,实现高效数据库整合与运维。
694 2
|
9月前
|
SQL 数据库 OceanBase
【赵渝强老师】OceanBase的配置文件与配置项
OceanBase集群中,OBServer节点需预创建etc、log、run、store等目录,store下还需clog、slog、sstable子目录。etc存放配置文件,etc2/3为自动备份目录,配置项分集群与租户级,通过SHOW PARAMETERS查看,支持模糊查询。
586 4
|
10月前
|
存储 关系型数据库 数据库
【赵渝强老师】国产金仓数据库的体系架构
金仓数据库(KingbaseES)是基于PostgreSQL开发的国产关系型数据库,具有自主知识产权。其体系结构涵盖逻辑存储、物理存储、进程与内存管理,支持高可靠性与性能优化,广泛应用于关键信息基础设施领域。
1433 1
|
11月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle数据库的PL/SQL编程语言
PL/SQL是Oracle对SQL的扩展,结合过程化编程特性,支持开发存储过程、函数和触发器。本文介绍其基本结构,并演示如何在SQL*Plus中编写“Hello World”程序,需启用serveroutput输出。也可使用Oracle SQL Developer更高效地开发调试PL/SQL应用。
297 3
|
11月前
|
NoSQL 测试技术 Redis
【赵渝强老师】Redis数据的迁移
Redis提供move、dump+restore和migrate三种方式实现数据迁移。move用于库内迁移,dump+restore跨实例传输,migrate则原子性地完成键的迁移与删除,支持多键批量操作,提升效率。
482 5
|
资源调度 分布式计算 调度
【赵渝强老师】Yarn的资源调度策略
Yarn作为资源和任务调度平台,支持多个应用程序同时运行,如MapReduce、Spark和Flink等。Yarn的资源调度方式主要包括FIFO Scheduler(先来先服务)、Capacity Scheduler(容量调度)和Fair Scheduler(公平调度)。FIFO Scheduler按任务提交顺序调度;Capacity Scheduler通过队列管理资源,支持多租户共享;Fair Scheduler则根据任务权重动态分配资源,确保公平性。
1232 8