about rowid

此博客转载自ITPUB博客,链接为http://blog.itpub.net/202861/viewspace-795660/ ,强调转载需注明出处,否则追究责任,但未提及Rowid具体信息技术内容。
對rowid的具體代表的意思不是很明白,所以找了找,找到了,貼出來以備後用.[@more@]本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(extended)的rowid: 1. rowid的介绍 先对rowid有个感官认识: SQL> select ROWID from Bruce_test where rownum<2 rowid ------------------ ---------- aaabnlaafaaaaapaaa oooooo fff bbbbbb rrr aaabnl aaa a-z> 0 - 25 (26) a-z 26 - 51 (26) 0-9 52 - 61 (10) +/ 62 - 63 (2) 共64位,明白这个后,就可以计算出10进制的编码值,计算公式如下: d * (b ^ p) 其中:b就是基数,这里就是64,p就是从右到左,已0开始的位置数 比如:上面的例子 文件号AAF,具体的计算应该是: 5*(64^0)=5; 0*(64^1)=0; 0*(64^2)=0; 文件号就是0+0+5=5 刚才提到的是rowid的显示方式:基于64位编码的18个字符显示,其实rowid的存储方式是:10 个字节即80位存储,其中数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,由此,我们可以得出: 32bit的object number,每个数据库最多有4G个对象 10bit的file number,每个对象最多有1022个文件(2个文件预留) 22bit的block number,每个文件最多有4M个BLOCK 16bit的row number,每个BLOCK最多有64K个ROWS 2. rowid相关的有用的sql 最简单的基于rowid的显示方式得到的响应的64位编码对应值的sql: select rowid , substr(rowid,1,6) "OBJECT", substr(rowid,7,3) "FILE", substr(rowid,10,6) "BLOCK", substr(rowid,16,3) "ROW" from TableName; OWID OBJECT FILE BLOCK ROW ------------------ ------------ ------ ------------ ------ AAABc4AADAAAGLUAAA AAABc4 AAD AAAGLU AAA AAABc4AADAAAGLUAAB AAABc4 AAD AAAGLU AAB AAABc4AADAAAGLUAAC AAABc4 AAD AAAGLU AAC AAABc4AADAAAGLUAAD AAABc4 AAD AAAGLU AAD AAABc4AADAAAGLUAAE AAABc4 AAD AAAGLU AAE 通过dbms_rowid这个包,可以直接的得到具体的rowid包含的信息: select dbms_rowid.rowid_object(rowid) object_id, dbms_rowid.rowid_relative_fno(rowid) file_id, dbms_rowid.rowid_block_number(rowid) block_id ,dbms_rowid.rowid_row_number(rowid) num from bruce_t where rownum<5 num ---------- ---------- ---------- ---------- create or replace function in return is begin return sql> select get_rowid(rowid), name from bruce_t; GET_ROWID(ROWID) NAME -------------------------------------------------------------------------------- -------------------------------- Object# is :5944 BruceLau Relative_fno is :3 Block number is :25300 Row number is :0 Object# is :5944 MabelTang Relative_fno is :3 Block number is :25300 Row number is :1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/202861/viewspace-795660/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/202861/viewspace-795660/

不是,我指的句柄是一个sqlite3类型的结构体啊,里面有如下内容struct sqlite3 { sqlite3_vfs *pVfs; /* OS Interface */ struct Vdbe *pVdbe; /* List of active virtual machines */ CollSeq *pDfltColl; /* The default collating sequence (BINARY) */ sqlite3_mutex *mutex; /* Connection mutex */ Db *aDb; /* All backends */ int nDb; /* Number of backends currently in use */ int flags; /* Miscellaneous flags. See below */ i64 lastRowid; /* ROWID of most recent insert (see above) */ i64 szMmap; /* Default mmap_size setting */ unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */ int errCode; /* Most recent error code (SQLITE_*) */ int errMask; /* & result codes with this before returning */ int iSysErrno; /* Errno value from last system error */ u16 dbOptFlags; /* Flags to enable/disable optimizations */ u8 enc; /* Text encoding */ u8 autoCommit; /* The auto-commit flag. */ u8 temp_store; /* 1: file 2: memory 0: default */ u8 mallocFailed; /* True if we have seen a malloc failure */ u8 bBenignMalloc; /* Do not require OOMs if true */ u8 dfltLockMode; /* Default locking-mode for attached dbs */ signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */ u8 suppressErr; /* Do not issue error messages if true */ u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */ u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ u8 mTrace; /* zero or more SQLITE_TRACE flags */ u8 skipBtreeMutex; /* True if no shared-cache backends */ int nextPagesize; /* Pagesize after VACUUM if >0 */ u32 magic; /* Magic number for detect library misuse */ int nChange; /* Value returned by sqlite3_changes() */ int nTotalChange; /* Value returned by sqlite3_total_changes() */ int aLimit[SQLITE_N_LIMIT]; /* Limits */ int nMaxSorterMmap; /* Maximum size of regions mapped by sorter */ struct sqlite3InitInfo { /* Information used during initialization */ int newTnum; /* Rootpage of table being initialized */ u8 iDb; /* Which db file is being initialized */ u8 busy; /* TRUE if currently initializing */ u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ u8 imposterTable; /* Building an imposter table */ } init;这只是一小部分内容,通过句柄能否知道数据的起始位置
10-01
内容概要:本文提出了一种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备一定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进一步验证模型泛化能力。
03-15
<think>好的,用户想了解数据库中ROWID的概念和用法。首先,我需要回忆ROWID的基本定义。ROWID是数据库系统中用于唯一标识表中每一行记录的标识符,通常由数据库内部自动生成和管理。不同的数据库管理系统可能有不同的实现方式。例如,Oracle中的ROWID包含物理地址信息,而SQLite的ROWID则是一个自增整数。 接下来,需要详细说明ROWID的常见用途。比如快速访问特定行,数据恢复,以及作为临时唯一标识。同时,要注意不同数据库的具体实现差异,比如Oracle的扩展ROWID结构,SQLite的自动创建ROWID列,以及MySQL中InnoDB引擎的伪列情况。 用户可能还想知道ROWID的优缺点,比如访问速度快但依赖物理存储结构,可能影响性能。此外,生成相关问题需要考虑ROWID的应用场景、不同数据库的区别、使用时的注意事项,以及与其他主键的区别。需要确保回答结构清晰,引用相关资料支持,比如Oracle的文档和InnoDB的处理方式,保持回答准确可靠。</think>### ROWID 的概念与用法 #### 1. **定义** ROWID 是数据库系统中用于**唯一标识表中每一行记录**的标识符。它是数据库内部自动生成的物理地址或逻辑标识,通常不可修改且独立于用户定义的主键[^1]。例如,Oracle 的 ROWID 包含数据文件编号、块号、行号等信息,格式如:`AAAWjSAAMAAAAvPAAA`。 #### 2. **核心作用** - **快速定位数据**:通过 ROWID 可直接访问行所在的物理存储位置,无需索引扫描[^2]。 - **临时唯一标识**:在事务处理或数据恢复中用于临时标记特定行。 - **优化查询性能**:某些操作(如 `SELECT COUNT(*)`)可能直接通过 ROWID 加速[^4]。 #### 3. **不同数据库的实现** | 数据库 | ROWID 特性 | |-----------|----------------------------------------------------------------------------| | **Oracle** | 物理地址编码,包含对象号、文件号、块号、行号 | | **SQLite** | 自增整数列 `_rowid_`,可显式定义为 `INTEGER PRIMARY KEY` | | **MySQL** | InnoDB 引擎提供伪列 `_rowid`,但仅在无主键且无唯一非空索引时生效 | #### 4. **使用场景** - **数据修复**:通过 ROWID 直接定位损坏数据。 - **高效分页**:结合 ROWID 实现快速分页查询。 - **临时操作**:在 PL/SQL 过程中用 ROWID 暂存行地址以便后续操作。 #### 5. **注意事项** - **非永久性**:若数据物理位置变化(如表重建),ROWID 可能改变。 - **慎用于业务逻辑**:ROWID 是数据库内部机制,与业务无关,不应替代主键。 - **性能权衡**:频繁通过 ROWID 访问可能增加 I/O 压力[^2]。 --- ### 示例代码(Oracle 环境) ```sql -- 查询员工表中 ROWID 和员工姓名 SELECT ROWID, employee_name FROM employees; -- 通过 ROWID 快速更新特定行 UPDATE employees SET salary = 10000 WHERE ROWID = 'AAAWjSAAMAAAAvPAAA'; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值