|
原帖由 douqq 于 2008-8-5 16:50 发表 ![]()
突然想知道,联合主键究竟是用什么原理实现的?
我想到一个办法就是把主键列 做hash运算做比较,可是hash运算也无法保证 源不同结果不同。
有知道内幕的麻烦揭发一下。谢谢
在B+树里,key由多个成分组成,每个成分有各自的类型、长度、顺序(升序、降序)。比较程序根据键描述进行比较。比较完成后的处理都是一样的。
观摩一下B+树的内部结构:
/*
* Define MAXKEYSIZE 240 and NPARTS 16 for AF251
*/
#define MAXKEYSIZE 120 /* max number of bytes in key */
#define NPARTS 8 /* max number of key parts */
struct keypart
{
short kp_start; /* starting byte of key part */
short kp_leng; /* length in bytes */
short kp_type; /* type of key part */
};
struct keydesc
{
short k_flags; /* flags */
short k_nparts; /* number of parts in key */
struct keypart
k_part[NPARTS]; /* each key part 这里看出复合主键啦! */
/* the following is for internal use only */
short k_len; /* length of whole key */
long k_rootnode; /* pointer to rootnode */
};
[ 本帖最后由 yulihua49 于 2009-6-16 09:35 编辑 ] |
|