仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 720|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之[tips]关于rowid的一些内容

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:30:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENT


关于rowid的一些内容



刘颖博

工夫:2004-6-12

mail:liuyingbo@126.com,请斧正



转载请说明出处及作者



本文会商的是关于oracle从8i入手下手引进object的观点后的rowid,即扩大(extended)的rowid:



1.rowid的先容



先对rowid有个感官熟悉:

SQL>selectROWIDfromBruce_testwhererownum<2;

ROWID
----------------------------
AAABnlAAFAAAAAPAAA



ROWID的格局以下:

数据工具编号文件编号块编号行编号

OOOOOOFFFBBBBBBRRR



我们能够看出,从下面的rowid能够得知:



AAABnl是数据工具编号

AAF是相干文件编号

AAAAAP是块编号

AAA是行编号



怎样根据这些编号失掉详细的十进制的编码值呢,这是常常碰到的成绩。这里必要分明rowid的是基于64位编码的18个字符显现(数据工具编号(6)+文件编号(3)+块编号(6)+行编号(3)=18位),个中

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的objectnumber,每一个数据库最多有4G个工具

10bit的filenumber,每一个工具最多有1022个文件(2个文件预留)

22bit的blocknumber,每一个文件最多有4M个BLOCK

16bit的rownumber,每一个BLOCK最多有64K个ROWS





2.rowid相干的有效的sql







最复杂的基于rowid的显现体例失掉的呼应的64位编码对应值的sql:

selectrowid,

substr(rowid,1,6)"OBJECT",

substr(rowid,7,3)"FILE",

substr(rowid,10,6)"BLOCK",

substr(rowid,16,3)"ROW"

fromTableName;





OWIDOBJECTFILEBLOCKROW

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

AAABc4AADAAAGLUAAAAAABc4AADAAAGLUAAA

AAABc4AADAAAGLUAABAAABc4AADAAAGLUAAB

AAABc4AADAAAGLUAACAAABc4AADAAAGLUAAC

AAABc4AADAAAGLUAADAAABc4AADAAAGLUAAD

AAABc4AADAAAGLUAAEAAABc4AADAAAGLUAAE





经由过程dbms_rowid这个包,能够间接的失掉详细的rowid包括的信息:



selectdbms_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)numfrombruce_twhererownum<5;



OBJECT_IDFILE_IDBLOCK_IDNUM

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

59443253000

59443253001

59443253002

59443253003



一些利用ROWID的函数
ROWIDTOCHAR(rowid):将ROWID转换成STRING
CHARTOROWID(rowid_string):将STRING转换成ROWID



别的,就是本人写的一些函数:(上面的函数是网友eygle供应)



createorreplacefunctionget_rowid


(l_rowidinvarchar2)


returnvarchar2


is


ls_my_rowidvarchar2(200);


rowid_typenumber;


object_numbernumber;


relative_fnonumber;


block_numbernumber;


row_numbernumber;


begin


dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno,block_number,row_number);


ls_my_rowid:=Object#is:||to_char(object_number)||chr(10)||


Relative_fnois:||to_char(relative_fno)||chr(10)||


Blocknumberis:||to_char(block_number)||chr(10)||


Rownumberis:||to_char(row_number);


returnls_my_rowid;


end;


/

使用下面的函数以下:

SQL>selectget_rowid(rowid),namefrombruce_t;

GET_ROWID(ROWID)NAME

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

Object#is:5944BruceLau

Relative_fnois:3

Blocknumberis:25300

Rownumberis:0



Object#is:5944MabelTang

Relative_fnois:3

Blocknumberis:25300

Rownumberis:1








CSV逻辑上由逗号分割数据的存储引擎
分手快乐 该用户已被删除
9#
发表于 2015-3-22 01:42:47 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
兰色精灵 该用户已被删除
8#
发表于 2015-3-15 14:02:26 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
7#
发表于 2015-3-7 20:30:03 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
透明 该用户已被删除
6#
发表于 2015-2-25 11:28:29 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
深爱那片海 该用户已被删除
5#
 楼主| 发表于 2015-2-8 12:02:19 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
活着的死人 该用户已被删除
地板
发表于 2015-2-2 22:11:40 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
若相依 该用户已被删除
板凳
发表于 2015-1-25 12:58:12 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
小妖女 该用户已被删除
沙发
发表于 2015-1-19 15:48:52 来自手机 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表