ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle数据库管理 » unique index和non-unique index的区别

标题: unique index和non-unique index的区别
在线/呼叫 lsq_008
初级会员



精华贴数 0
个人空间 713
技术积分 277 (7152)
社区积分 0 (1530982)
注册日期 2007-8-25
论坛徽章:1
2008北京奥运纪念徽章:击剑     
      

发表于 2008-9-5 10:09 
unique index和non-unique index的区别

今天在看concept时,看到这样一句话:
For a unique index, one rowid exists for each data value. For a nonunique index, the
rowid is included in the key in sorted order, so nonunique indexes are sorted by the
index key and rowid.


创建了一个unique index和一个non-unique index,然后dump,其中unique index的如下:

Leaf block dump
===============
header address 181911140=0xad7be64
kdxcolev 0
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
kdxconco 1
kdxcosdc 0
kdxconro 520
kdxcofbo 1076=0x434
kdxcofeo 1896=0x768
kdxcoavs 820
kdxlespl 0
kdxlende 0
kdxlenxt 37749902=0x240048e
kdxleprv 0=0x0
kdxledsz 6
kdxlebksz 8032
row#0[8021] flag: -----, lock: 0, data6):  02 40 00 27 00 00
col 0; len 2; (2):  c1 02
row#1[8010] flag: -----, lock: 0, data6):  02 40 00 27 00 01
col 0; len 2; (2):  c1 03
row#2[7999] flag: -----, lock: 0, data6):  02 40 00 27 00 02
col 0; len 2; (2):  c1 04
row#3[7988] flag: -----, lock: 0, data6):  02 40 00 27 00 03
col 0; len 2; (2):  c1 05
row#4[7977] flag: -----, lock: 0, data6):  02 40 00 27 00 04
col 0; len 2; (2):  c1 06
row#5[7966] flag: -----, lock: 0, data6):  02 40 00 27 00 05
col 0; len 2; (2):  c1 07
row#6[7955] flag: -----, lock: 0, data6):  02 40 00 27 00 06
col 0; len 2; (2):  c1 08


non-unique index的dump文件如下:

Leaf block dump
===============
header address 181911140=0xad7be64
kdxcolev 0
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
kdxconco 2
kdxcosdc 0
kdxconro 485
kdxcofbo 1006=0x3ee
kdxcofeo 1830=0x726
kdxcoavs 824
kdxlespl 0
kdxlende 0
kdxlenxt 37750670=0x240078e
kdxleprv 0=0x0
kdxledsz 0
kdxlebksz 8032
row#0[8020] flag: -----, lock: 0
col 0; len 2; (2):  c1 02
col 1; len 6; (6):  02 40 00 2f 00 00
row#1[8008] flag: -----, lock: 0
col 0; len 2; (2):  c1 03
col 1; len 6; (6):  02 40 00 2f 00 01
row#2[7996] flag: -----, lock: 0
col 0; len 2; (2):  c1 04
col 1; len 6; (6):  02 40 00 2f 00 02
row#3[7984] flag: -----, lock: 0
col 0; len 2; (2):  c1 05
col 1; len 6; (6):  02 40 00 2f 00 03
row#4[7972] flag: -----, lock: 0
col 0; len 2; (2):  c1 06


这两个dump文件看不太懂,只能看到non-unique index的比unique index的多存储了一个rowid,另外在unique index里多了个data6):  02 40 00 27 00 00那么unique index的每个key对应的rowid是存放在什么位置呢?这个data6):  02 40 00 27 00 00到底代表什么含义呢?
本人刚接触oracle不久,往各位前辈指点迷津!多谢了

[ 本帖最后由 lsq_008 于 2008-9-5 10:14 编辑 ]


__________________
http://asktom.oracle.com&http://www.ordba.net/&http://www.orafaq.com/
只看该作者    顶部
在线/呼叫 棉花糖ONE


精华贴数 0
个人空间 0
技术积分 16387 (67)
社区积分 1333 (815)
注册日期 2007-2-21
论坛徽章:57
现任管理团队成员     
      

发表于 2008-9-5 10:12 
唯一索引和非唯一索引都存储了rowid,唯一索引的rowid是放行头的,非唯一索引把rowid当做一个字段来处理,唯一索引不用记录rowid的长度,唯一索引比非唯一索引少了一个bytes


__________________
qq群:47823366
只看该作者    顶部
离线 小虫08


来自 天津
精华贴数 0
个人空间 0
技术积分 4200 (348)
社区积分 245 (2189)
注册日期 2008-8-8
论坛徽章:25
红宝石萤石蓝锆石紫水晶海蓝宝石祖母绿
数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星

发表于 2008-9-5 10:14 


QUOTE:
原帖由 棉花糖ONE 于 2008-9-5 10:12 发表
唯一索引和非唯一索引都存储了rowid,唯一索引的rowid是放行头的,非唯一索引把rowid当做一个字段来处理,唯一索引不用记录rowid的长度,唯一索引比非唯一索引少了一个bytes

棉花,强!


__________________
梦想有多远,就能走多远!
只看该作者    顶部
在线/呼叫 lsq_008
初级会员



精华贴数 0
个人空间 713
技术积分 277 (7152)
社区积分 0 (1530982)
注册日期 2007-8-25
论坛徽章:1
2008北京奥运纪念徽章:击剑     
      

发表于 2008-9-5 10:20 


QUOTE:
原帖由 棉花糖ONE 于 2008-9-5 10:12 发表
唯一索引和非唯一索引都存储了rowid,唯一索引的rowid是放行头的,非唯一索引把rowid当做一个字段来处理,唯一索引不用记录rowid的长度,唯一索引比非唯一索引少了一个bytes

多谢!那么这一行row#0[8021] flag: -----, lock: 0, data6):  02 40 00 27 00 00中的data6):  02 40 00 27 00 00到底代表什么呢,是rowid吗?


__________________
http://asktom.oracle.com&http://www.ordba.net/&http://www.orafaq.com/
只看该作者    顶部
在线/呼叫 棉花糖ONE


精华贴数 0
个人空间 0
技术积分 16387 (67)
社区积分 1333 (815)
注册日期 2007-2-21
论坛徽章:57
现任管理团队成员     
      

发表于 2008-9-5 10:22 
02 40 00 27 00 00 这个就是rowid


__________________
qq群:47823366
只看该作者    顶部
在线/呼叫 lsq_008
初级会员



精华贴数 0
个人空间 713
技术积分 277 (7152)
社区积分 0 (1530982)
注册日期 2007-8-25
论坛徽章:1
2008北京奥运纪念徽章:击剑     
      

发表于 2008-9-5 10:29 
真是一语点醒梦中人啊,多谢多谢!


__________________
http://asktom.oracle.com&http://www.ordba.net/&http://www.orafaq.com/
只看该作者    顶部
离线 xsmdel
Dber


来自 中国重庆
精华贴数 0
个人空间 140
技术积分 1552 (1112)
社区积分 52 (4969)
注册日期 2008-2-20
论坛徽章:5
授权会员2008北京奥运纪念徽章:足球数据库板块每日发贴之星2008北京奥运纪念徽章:艺术体操2008北京奥运纪念徽章:排球 
      

发表于 2008-9-5 13:32 
棉花糖太强了!!向你学习!!


__________________
临渊羡鱼,不如退而结其网
只看该作者    顶部
在线/呼叫 waterbird1985
初级会员



精华贴数 0
个人空间 0
技术积分 41 (32537)
社区积分 0 (1401420)
注册日期 2007-5-29
论坛徽章:0
      
      

发表于 2008-9-29 01:27 
回复 #2 棉花糖ONE 的帖子

这样实现有什么优点?


只看该作者    顶部
在线/呼叫 zergduan
SE-RequieM


来自 Beijing Massage Center
精华贴数 0
个人空间 414
技术积分 7371 (179)
社区积分 1 (38784)
注册日期 2005-5-16
论坛徽章:32
ITPUB元老     
      

发表于 2008-9-29 01:59 


QUOTE:
原帖由 waterbird1985 于 2008-9-29 01:27 发表
这样实现有什么优点?

优点?
不是优点,oracle用这种方法来实现非唯一索引罢了


__________________
只看该作者    顶部
在线/呼叫 waterbird1985
初级会员



精华贴数 0
个人空间 0
技术积分 41 (32537)
社区积分 0 (1401420)
注册日期 2007-5-29
论坛徽章:0
      
      

发表于 2008-9-29 12:28 
Oracle每种处理方式都应该有它的含义,这个uniq和非uniq在我看来可以用一样的数据格式,所以不太理解为什么这么弄


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问