懂索引文件IDX格式的大侠进

zhengwei1984222 2006-12-18 03:45:44
分析FP的索引IDX格式两天了,始终没搞明白ms是如何压缩存储key字段的,方法很奇怪
google上相关内容很少,唯有几篇还不如msdn详细:
http://msdn2.microsoft.com/en-us/library/s8tb8f47(VS.71).aspx

疑点在key字段是如何压缩的,请指教~
...全文
566 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengwei1984222 2006-12-27
  • 打赏
  • 举报
回复
哎,google搜索未果

give up
CaiNiaoWuZui 2006-12-18
  • 打赏
  • 举报
回复
学习
zhengwei1984222 2006-12-18
  • 打赏
  • 举报
回复
恩,你这个是中文版的...

记录号和关键字文本确实是分开的,关键字文本被放置在块尾
用2进制方式查看,能看出来的唯有记录号,压缩后的关键字文本完全变样
掩码是如何操作的不明白

很好奇ms的算法
十豆三 2006-12-18
  • 打赏
  • 举报
回复
压缩索引文件结构 (.idx)

压缩索引头记录

 
偏移字节 描述
00 – 03
指向根节点的指针

04 – 07
指向自由节点列表的指针(如果不存在,则为 -1)

08 – 11
保留供内部使用

12 – 13
关键字长度

14
索引选项(下列数字值或它们的和):
1 – 唯一索引
8 – 带有 FOR 子句的索引
32 – 压缩索引格式
64 – 复合索引标头

15
索引签名

16 – 19
保留供内部使用

20 – 23
保留供内部使用

24 – 27
保留供内部使用

28 – 31
保留供内部使用

32 – 35
保留供内部使用

36 – 501
保留供内部使用

502 – 503
升序或降序:0 = 升序,1 = 降序

504 – 505
保留供内部使用

506 – 507
FOR 表达式池的长度1

508 – 509
保留供内部使用

510 – 511
关键字池的长度1

512 – 1023
关键字表达式池(未编译)


1 该信息跟踪关键字表达式池中使用的空间。

压缩索引内部节点记录
偏移字节 描述
00 – 01
节点属性(下列数字值或它们的和):
a. 0 – 索引节点
b. 1 – 根节点
c. 2 – 叶节点

02 – 03
存在的关键字数量(0、1 或更多)

04 – 07
指向紧靠当前节点左边节点的指针(在同一层次上;如果不存在,则为 -1)

08 – 11
指向紧靠当前节点右边节点的指针(在同一层次上;如果不存在,则为 -1)

12 – 511
可达 500 个字符,以带有四字节十六进制数字的关键字长度包含关键字值(以正常的从左到右格式储存):

该节点总是包含索引关键字、记录编号和内联索引指针。2

02 – 03 字节将指出关键字/四字节十六进制数字组合出现的次数。


压缩索引的外部节点记录
00 – 01
节点属性(下列数字值或它们的和):
0 – 索引节点
1 – 根节点
2 – 叶节点

02 – 03
存在的关键字数量(0、1 或更多)

04 – 07
指向紧靠当前节点左边节点的指针(在同一层次上;如果不存在,则为 -1)

08 – 11
指向紧靠当前节点右边节点的指针(在同一层次上;如果不存在,则为 -1)

12 – 13
节点中可用的自由空间

14 – 17
记录号掩码

18
重复字节的计数掩码

19
后缀字节的计数掩码

20
用作记录编号的位数

21
用作重复计数的位数

22
用作后缀计数的位数

23
保存记录号、重复计数和后缀计数的字节数

24 – 511
索引关键字和信息2


2 每项都由记录号、重复字节计数和后缀字节计数组成,全部为压缩形式。关键字文本被放置在节点的逻辑尾,向后起作用,适用于当前的各个关键字项。
wwwwb 2006-12-18
  • 打赏
  • 举报
回复
这个恐怕只有MS才知道吧

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧