b*tree index的那些事(三):唯一索引与非唯一索引结构区别

 唯一索引和非唯一索引在结构上有一些区别,下面就来分析这些区别。

结构区别


root block和branch block结构基本一样,引用之前dump的非唯一索引分析。

非唯一索引的branch block


  1. Branch block dump
  2. =================
  3. header address 140186507995716=0x7f7fb702ea44
  4. kdxcolev 1
  5. KDXCOLEV Flags = - - -
  6. kdxcolok 1
  7. kdxcoopc 0x85: opcode=5: iot flags=--- is converted=Y
  8. kdxconco 2
  9. kdxcosdc 1
  10. kdxconro 619
  11. kdxcofbo 1266=0x4f2
  12. kdxcofeo 2550=0x9f6
  13. kdxcoavs 1284
  14. kdxbrlmc 4229529=0x408999
  15. kdxbrsno 616
  16. kdxbrbksz 8056
  17. kdxbr2urrc 0
  18. row#0[4863] dba: 4230420=0x408d14
  19. col 0; len 3; (3): 34 34 30
  20. col 1; TERM
  21. row#1[4872] dba: 4230034=0x408b92
  22. col 0; len 3; (3): 34 34 31
  23. col 1; TERM
  24. row#2[4881] dba: 4229537=0x4089a1
  25. col 0; len 3; (3): 34 34 32
  26. col 1; TERM
  27. row#3[4890] dba: 4230422=0x408d16
  28. col 0; len 3; (3): 34 34 33
  29. col 1; TERM
  30. ...
  31. row#617[2559] dba: 4230888=0x408ee8
  32. col 0; len 3; (3): 39 39 37
  33. col 1; TERM
  34. row#618[8047] dba: 4229865=0x408ae9
  35. col 0; len 3; (3): 39 39 38
  36. col 1; TERM

唯一索引的branch block


  1. Branch block dump
  2. =================
  3. header address 140045722856004=0x7f5eef902a44
  4. kdxcolev 1
  5. KDXCOLEV Flags = - - -
  6. kdxcolok 0
  7. kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
  8. kdxconco 1
  9. kdxcosdc 0
  10. kdxconro 33
  11. kdxcofbo 94=0x5e
  12. kdxcofeo 7828=0x1e94
  13. kdxcoavs 7734
  14. kdxbrlmc 4229050=0x4087ba
  15. kdxbrsno 0
  16. kdxbrbksz 8056
  17. kdxbr2urrc 0
  18. row#0[8049] dba: 4229051=0x4087bb
  19. col 0; len 2; (2): 31 31
  20. row#1[8042] dba: 4229052=0x4087bc
  21. col 0; len 2; (2): 31 34
  22. row#2[8035] dba: 4229053=0x4087bd
  23. col 0; len 2; (2): 31 37
  24. row#3[8029] dba: 4229054=0x4087be
  25. col 0; len 1; (1): 32
  26. ...
  27. col 0; len 2; (2): 39 33
  28. row#31[7835] dba: 4229106=0x4087f2
  29. col 0; len 2; (2): 39 36
  30. row#32[7828] dba: 4229107=0x4087f3
  31. col 0; len 2; (2): 39 39
总结:
  • 1.唯一索引和非唯一索引的root block和branch block结构大体基本一致,具体的结构分析见上一节对root block和branch block的分析。
  • 2.非唯一索引的root block和branch block的kdxconco总比唯一索引的root block和branch block的kdxconco少1,因为唯一索引的root block和branch block不需要存储rowid或rowid前缀,这里对应的是每行的col 1。

非唯一索引的leaf block


  1. Leaf block dump
  2. ===============
  3. header address 140186507995740=0x7f7fb702ea5c
  4. kdxcolev 0
  5. KDXCOLEV Flags = - - -
  6. kdxcolok 1
  7. kdxcoopc 0x87: opcode=7: iot flags=--- is converted=Y
  8. kdxconco 2
  9. kdxcosdc 1
  10. kdxconro 2
  11. kdxcofbo 40=0x28
  12. kdxcofeo 4010=0xfaa
  13. kdxcoavs 3970
  14. kdxlespl 0
  15. kdxlende 0
  16. kdxlenxt 4230421=0x408d15
  17. kdxleprv 4229537=0x4089a1
  18. kdxledsz 0  --bytes in ROWID data
  19. kdxlebksz 8032
  20. row#0[4010] flag: ----S-, lock: 2, len=2011
  21. col 0; len 2000; (2000): 34 34 33 20 ... 20
  22. col 1; len 6; (6): 00 40 8a 14 00 01
  23. row#1[6021] flag: ------, lock: 2, len=2011
  24. col 0; len 2000; (2000): 34 34 33 20 ... 20
  25. col 1; len 6; (6): 00 40 8c 61 00 02

唯一索引的leaf block


  1. Leaf block dump
  2. ===============
  3. header address 140045722856028=0x7f5eef902a5c
  4. kdxcolev 0
  5. KDXCOLEV Flags = - - -
  6. kdxcolok 0
  7. kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
  8. kdxconco 1
  9. kdxcosdc 0
  10. kdxconro 3
  11. kdxcofbo 42=0x2a
  12. kdxcofeo 2002=0x7d2
  13. kdxcoavs 1960
  14. kdxlespl 0
  15. kdxlende 0
  16. kdxlenxt 4229104=0x4087f0
  17. kdxleprv 4229094=0x4087e6
  18. kdxledsz 6  --bytes in ROWID data
  19. kdxlebksz 8032
  20. row#0[6022] flag: ------, lock: 0, len=2010, data:(6): 00 40 87 ee 00 00
  21. col 0; len 2000; (2000): 38 38 20..20
  22. row#1[4012] flag: ------, lock: 0, len=2010, data:(6): 00 40 87 ee 00 01
  23. col 0; len 2000; (2000): 38 39 20..20
  24. row#2[2002] flag: ------, lock: 0, len=2010, data:(6): 00 40 87 b3 00 02
  25. col 0; len 2000; (2000): 39 20 20 20

 

总结:
  • 1.因为索引条目必须是唯一的,所以对于非唯一索引的索引条目=索引键值+rowid,而唯一索引的索引条目=索引键值,ROWID存储在DATA。
  • 2.Unique indexes use one byte per row less than non-unique indexes

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

转载于:http://blog.itpub.net/31347199/viewspace-2114183/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值