进一步一剖析MYI索引文件的树形结构存储以及索引块的定位[@more@]
1. 绪
我们在上一节中,仔细地探讨了索引文件的结构以及各位的含义.从而让我们了解了MYI.
但是用的例子由于行数比较少, 所有KEY VALUE都存储到了ROOT块. 没有出现多层的索引树结构.
通过这个例子,我们来了解一下,当有索引树出现多层的时候,MYSQL是怎么处理的.
我们在上一节中,仔细地探讨了索引文件的结构以及各位的含义.从而让我们了解了MYI.
但是用的例子由于行数比较少, 所有KEY VALUE都存储到了ROOT块. 没有出现多层的索引树结构.
通过这个例子,我们来了解一下,当有索引树出现多层的时候,MYSQL是怎么处理的.
2. 创建脚本:
drop table if exists heyf ;
create table heyf (id char(5)) type myisam DEFAULT CHARSET=latin1;
drop procedure if exists proc1;
delimiter $$
create procedure proc1()
begin
declare v_cnt int default 0;
loop1:loop
set v_cnt := v_cnt+1;
if v_cnt=200 then leave loop1 ;
end if;
insert into heyf values (v_cnt) ;
end loop loop1;
end;
$$
delimiter ;
call proc1();
create index id_ind on heyf(id) ;
drop table if exists heyf ;
create table heyf (id char(5)) type myisam DEFAULT CHARSET=latin1;
drop procedure if exists proc1;
delimiter $$
create procedure proc1()
begin
declare v_cnt int default 0;
loop1:loop
set v_cnt := v_cnt+1;
if v_cnt=200 then leave loop1 ;
end if;
insert into heyf values (v_cnt) ;
end loop loop1;
end;
$$
delimiter ;
call proc1();
create index id_ind on heyf(id) ;
3. dump MYI 文件
system hexdump /opt/mysql/data/test/heyf.MYI
---------------------------------------------------
0000000 fefe 0107 0200 5401 b000 6400 c400 0100
0000010 0000 0001 0108 0000 0000 ff30 0000 0000
0000020 0000 c700 0000 0000 0000 0000 0000 0000
0000030 0000 c700 ffff ffff ffff ffff 0000 0000
0000040 0000 0014 0000 0000 0000 7105 0000 0000
0000050 0000 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 5e3c
0000070 0000 3e00 0000 0000 0000 0100 0000 0000
0000080 0000 0010 ffff ffff ffff ffff 0000 0000
0000090 0000 0000 b749 f24d 0000 0000 0000 0100
00000a0 0000 0000 b749 f24d 0000 0000 0000 0000
00000b0 0000 0000 b749 f24d 0000 0000 0000 c700
00000c0 0000 0100 0000 0000 0000 0004 0000 0000
00000d0 0000 0000 0000 0000 0000 0000 0000 0000
*
00000f0 0000 0600 0000 0700 0000 0600 0000 0600
0000100 0000 1400 0000 0200 0000 0000 0606 0001
0000110 0000 0000 0004 1000 0000 0000 0000 0000
0000120 0000 0000 0000 0000 0101 4800 0004 0c00
0000130 0c00 0c00 0801 0002 0000 1000 0500 0000
0000140 0100 0000 0000 0000 0100 0000 0000 0000
0000150 0205 0000 0000 0000 0000 0000 0000 0000
0000160 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 f203 3101 2020 2020 0000 0000 0000 3101
0000410 2030 2020 0000 0000 0900 3101 3030 2020
0000420 0000 0000 6300 3101 3130 2020 0000 0000
0000430 6400 3101 3230 2020 0000 0000 6500 3101
0000440 3330 2020 0000 0000 6600 3101 3430 2020
0000450 0000 0000 6700 3101 3530 2020 0000 0000
0000460 6800 3101 3630 2020 0000 0000 6900 3101
0000470 3730 2020 0000 0000 6a00 3101 3830 2020
0000480 0000 0000 6b00 3101 3930 2020 0000 0000
0000490 6c00 3101 2031 2020 0000 0000 0a00 3101
00004a0 3031 2020 0000 0000 6d00 3101 3131 2020
00004b0 0000 0000 6e00 3101 3231 2020 0000 0000
00004c0 6f00 3101 3331 2020 0000 0000 7000 3101
00004d0 3431 2020 0000 0000 7100 3101 3531 2020
00004e0 0000 0000 7200 3101 3631 2020 0000 0000
00004f0 7300 3101 3731 2020 0000 0000 7400 3101
0000500 3831 2020 0000 0000 7500 3101 3931 2020
0000510 0000 0000 7600 3101 2032 2020 0000 0000
0000520 0b00 3101 3032 2020 0000 0000 7700 3101
0000530 3132 2020 0000 0000 7800 3101 3232 2020
0000540 0000 0000 7900 3101 3332 2020 0000 0000
0000550 7a00 3101 3432 2020 0000 0000 7b00 3101
0000560 3532 2020 0000 0000 7c00 3101 3632 2020
0000570 0000 0000 7d00 3101 3732 2020 0000 0000
0000580 7e00 3101 3832 2020 0000 0000 7f00 3101
0000590 3932 2020 0000 0000 8000 3101 2033 2020
00005a0 0000 0000 0c00 3101 3033 2020 0000 0000
00005b0 8100 3101 3133 2020 0000 0000 8200 3101
00005c0 3233 2020 0000 0000 8300 3101 3333 2020
00005d0 0000 0000 8400 3101 3433 2020 0000 0000
00005e0 8500 3101 3533 2020 0000 0000 8600 3101
00005f0 3633 2020 0000 0000 8700 3101 3733 2020
0000600 0000 0000 8800 3101 3833 2020 0000 0000
0000610 8900 3101 3933 2020 0000 0000 8a00 3101
0000620 2034 2020 0000 0000 0d00 3101 3034 2020
0000630 0000 0000 8b00 3101 3134 2020 0000 0000
0000640 8c00 3101 3234 2020 0000 0000 8d00 3101
0000650 3334 2020 0000 0000 8e00 3101 3434 2020
0000660 0000 0000 8f00 3101 3534 2020 0000 0000
0000670 9000 3101 3634 2020 0000 0000 9100 3101
0000680 3734 2020 0000 0000 9200 3101 3834 2020
0000690 0000 0000 9300 3101 3934 2020 0000 0000
00006a0 9400 3101 2035 2020 0000 0000 0e00 3101
00006b0 3035 2020 0000 0000 9500 3101 3135 2020
00006c0 0000 0000 9600 3101 3235 2020 0000 0000
00006d0 9700 3101 3335 2020 0000 0000 9800 3101
00006e0 3435 2020 0000 0000 9900 3101 3535 2020
00006f0 0000 0000 9a00 3101 3635 2020 0000 0000
0000700 9b00 3101 3735 2020 0000 0000 9c00 3101
0000710 3835 2020 0000 0000 9d00 3101 3935 2020
0000720 0000 0000 9e00 3101 2036 2020 0000 0000
0000730 0f00 3101 3036 2020 0000 0000 9f00 3101
0000740 3136 2020 0000 0000 a000 3101 3236 2020
0000750 0000 0000 a100 3101 3336 2020 0000 0000
0000760 a200 3101 3436 2020 0000 0000 a300 3101
0000770 3536 2020 0000 0000 a400 3101 3636 2020
0000780 0000 0000 a500 3101 3736 2020 0000 0000
0000790 a600 3101 3836 2020 0000 0000 a700 3101
00007a0 3936 2020 0000 0000 a800 3101 2037 2020
00007b0 0000 0000 1000 3101 3037 2020 0000 000001
00007c0 a900 3101 3137 2020 0000 0000 aa00 3101
00007d0 3237 2020 0000 0000 ab00 3101 3337 2020
00007e0 0000 0000 ac00 3101 3437 2020 0000 0000
00007f0 ad00 0000 0000 0000 0000 0000 0000 0000
system hexdump /opt/mysql/data/test/heyf.MYI
---------------------------------------------------
0000000 fefe 0107 0200 5401 b000 6400 c400 0100
0000010 0000 0001 0108 0000 0000 ff30 0000 0000
0000020 0000 c700 0000 0000 0000 0000 0000 0000
0000030 0000 c700 ffff ffff ffff ffff 0000 0000
0000040 0000 0014 0000 0000 0000 7105 0000 0000
0000050 0000 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 5e3c
0000070 0000 3e00 0000 0000 0000 0100 0000 0000
0000080 0000 0010 ffff ffff ffff ffff 0000 0000
0000090 0000 0000 b749 f24d 0000 0000 0000 0100
00000a0 0000 0000 b749 f24d 0000 0000 0000 0000
00000b0 0000 0000 b749 f24d 0000 0000 0000 c700
00000c0 0000 0100 0000 0000 0000 0004 0000 0000
00000d0 0000 0000 0000 0000 0000 0000 0000 0000
*
00000f0 0000 0600 0000 0700 0000 0600 0000 0600
0000100 0000 1400 0000 0200 0000 0000 0606 0001
0000110 0000 0000 0004 1000 0000 0000 0000 0000
0000120 0000 0000 0000 0000 0101 4800 0004 0c00
0000130 0c00 0c00 0801 0002 0000 1000 0500 0000
0000140 0100 0000 0000 0000 0100 0000 0000 0000
0000150 0205 0000 0000 0000 0000 0000 0000 0000
0000160 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 f203 3101 2020 2020 0000 0000 0000 3101
0000410 2030 2020 0000 0000 0900 3101 3030 2020
0000420 0000 0000 6300 3101 3130 2020 0000 0000
0000430 6400 3101 3230 2020 0000 0000 6500 3101
0000440 3330 2020 0000 0000 6600 3101 3430 2020
0000450 0000 0000 6700 3101 3530 2020 0000 0000
0000460 6800 3101 3630 2020 0000 0000 6900 3101
0000470 3730 2020 0000 0000 6a00 3101 3830 2020
0000480 0000 0000 6b00 3101 3930 2020 0000 0000
0000490 6c00 3101 2031 2020 0000 0000 0a00 3101
00004a0 3031 2020 0000 0000 6d00 3101 3131 2020
00004b0 0000 0000 6e00 3101 3231 2020 0000 0000
00004c0 6f00 3101 3331 2020 0000 0000 7000 3101
00004d0 3431 2020 0000 0000 7100 3101 3531 2020
00004e0 0000 0000 7200 3101 3631 2020 0000 0000
00004f0 7300 3101 3731 2020 0000 0000 7400 3101
0000500 3831 2020 0000 0000 7500 3101 3931 2020
0000510 0000 0000 7600 3101 2032 2020 0000 0000
0000520 0b00 3101 3032 2020 0000 0000 7700 3101
0000530 3132 2020 0000 0000 7800 3101 3232 2020
0000540 0000 0000 7900 3101 3332 2020 0000 0000
0000550 7a00 3101 3432 2020 0000 0000 7b00 3101
0000560 3532 2020 0000 0000 7c00 3101 3632 2020
0000570 0000 0000 7d00 3101 3732 2020 0000 0000
0000580 7e00 3101 3832 2020 0000 0000 7f00 3101
0000590 3932 2020 0000 0000 8000 3101 2033 2020
00005a0 0000 0000 0c00 3101 3033 2020 0000 0000
00005b0 8100 3101 3133 2020 0000 0000 8200 3101
00005c0 3233 2020 0000 0000 8300 3101 3333 2020
00005d0 0000 0000 8400 3101 3433 2020 0000 0000
00005e0 8500 3101 3533 2020 0000 0000 8600 3101
00005f0 3633 2020 0000 0000 8700 3101 3733 2020
0000600 0000 0000 8800 3101 3833 2020 0000 0000
0000610 8900 3101 3933 2020 0000 0000 8a00 3101
0000620 2034 2020 0000 0000 0d00 3101 3034 2020
0000630 0000 0000 8b00 3101 3134 2020 0000 0000
0000640 8c00 3101 3234 2020 0000 0000 8d00 3101
0000650 3334 2020 0000 0000 8e00 3101 3434 2020
0000660 0000 0000 8f00 3101 3534 2020 0000 0000
0000670 9000 3101 3634 2020 0000 0000 9100 3101
0000680 3734 2020 0000 0000 9200 3101 3834 2020
0000690 0000 0000 9300 3101 3934 2020 0000 0000
00006a0 9400 3101 2035 2020 0000 0000 0e00 3101
00006b0 3035 2020 0000 0000 9500 3101 3135 2020
00006c0 0000 0000 9600 3101 3235 2020 0000 0000
00006d0 9700 3101 3335 2020 0000 0000 9800 3101
00006e0 3435 2020 0000 0000 9900 3101 3535 2020
00006f0 0000 0000 9a00 3101 3635 2020 0000 0000
0000700 9b00 3101 3735 2020 0000 0000 9c00 3101
0000710 3835 2020 0000 0000 9d00 3101 3935 2020
0000720 0000 0000 9e00 3101 2036 2020 0000 0000
0000730 0f00 3101 3036 2020 0000 0000 9f00 3101
0000740 3136 2020 0000 0000 a000 3101 3236 2020
0000750 0000 0000 a100 3101 3336 2020 0000 0000
0000760 a200 3101 3436 2020 0000 0000 a300 3101
0000770 3536 2020 0000 0000 a400 3101 3636 2020
0000780 0000 0000 a500 3101 3736 2020 0000 0000
0000790 a600 3101 3836 2020 0000 0000 a700 3101
00007a0 3936 2020 0000 0000 a800 3101 2037 2020
00007b0 0000 0000 1000 3101 3037 2020 0000 000001
00007c0 a900 3101 3137 2020 0000 0000 aa00 3101
00007d0 3237 2020 0000 0000 ab00 3101 3337 2020
00007e0 0000 0000 ac00 3101 3437 2020 0000 0000
00007f0 ad00 0000 0000 0000 0000 0000 0000 0000
0000800 f203 3101 3637 2020 0000 0000 af00 3101
0000810 3737 2020 0000 0000 b000 3101 3837 2020
0000820 0000 0000 b100 3101 3937 2020 0000 0000
0000830 b200 3101 2038 2020 0000 0000 1100 3101
0000840 3038 2020 0000 0000 b300 3101 3138 2020
0000850 0000 0000 b400 3101 3238 2020 0000 0000
0000860 b500 3101 3338 2020 0000 0000 b600 3101
0000870 3438 2020 0000 0000 b700 3101 3538 2020
0000880 0000 0000 b800 3101 3638 2020 0000 0000
0000890 b900 3101 3738 2020 0000 0000 ba00 3101
00008a0 3838 2020 0000 0000 bb00 3101 3938 2020
00008b0 0000 0000 bc00 3101 2039 2020 0000 0000
00008c0 1200 3101 3039 2020 0000 0000 bd00 3101
00008d0 3139 2020 0000 0000 be00 3101 3239 2020
00008e0 0000 0000 bf00 3101 3339 2020 0000 0000
00008f0 c000 3101 3439 2020 0000 0000 c100 3101
0000900 3539 2020 0000 0000 c200 3101 3639 2020
0000910 0000 0000 c300 3101 3739 2020 0000 0000
0000920 c400 3101 3839 2020 0000 0000 c500 3101
0000930 3939 2020 0000 0000 c600 3201 2020 2020
0000940 0000 0000 0100 3201 2030 2020 0000 0000
0000950 1300 3201 2031 2020 0000 0000 1400 3201
0000960 2032 2020 0000 0000 1500 3201 2033 2020
0000970 0000 0000 1600 3201 2034 2020 0000 0000
0000980 1700 3201 2035 2020 0000 0000 1800 3201
0000990 2036 2020 0000 0000 1900 3201 2037 2020
00009a0 0000 0000 1a00 3201 2038 2020 0000 0000
00009b0 1b00 3201 2039 2020 0000 0000 1c00 3301
00009c0 2020 2020 0000 0000 0200 3301 2030 2020
00009d0 0000 0000 1d00 3301 2031 2020 0000 0000
00009e0 1e00 3301 2032 2020 0000 0000 1f00 3301
00009f0 2033 2020 0000 0000 2000 3301 2034 2020
0000a00 0000 0000 2100 3301 2035 2020 0000 0000
0000a10 2200 3301 2036 2020 0000 0000 2300 3301
0000a20 2037 2020 0000 0000 2400 3301 2038 2020
0000a30 0000 0000 2500 3301 2039 2020 0000 0000
0000a40 2600 3401 2020 2020 0000 0000 0300 3401
0000a50 2030 2020 0000 0000 2700 3401 2031 2020
0000a60 0000 0000 2800 3401 2032 2020 0000 0000
0000a70 2900 3401 2033 2020 0000 0000 2a00 3401
0000a80 2034 2020 0000 0000 2b00 3401 2035 2020
0000a90 0000 0000 2c00 3401 2036 2020 0000 0000
0000aa0 2d00 3401 2037 2020 0000 0000 2e00 3401
0000ab0 2038 2020 0000 0000 2f00 3401 2039 2020
0000ac0 0000 0000 3000 3501 2020 2020 0000 0000
0000ad0 0400 3501 2030 2020 0000 0000 3100 3501
0000ae0 2031 2020 0000 0000 3200 3501 2032 2020
0000af0 0000 0000 3300 3501 2033 2020 0000 0000
0000b00 3400 3501 2034 2020 0000 0000 3500 3501
0000b10 2035 2020 0000 0000 3600 3501 2036 2020
0000b20 0000 0000 3700 3501 2037 2020 0000 0000
0000b30 3800 3501 2038 2020 0000 0000 3900 3501
0000b40 2039 2020 0000 0000 3a00 3601 2020 2020
0000b50 0000 0000 0500 3601 2030 2020 0000 0000
0000b60 3b00 3601 2031 2020 0000 0000 3c00 3601
0000b70 2032 2020 0000 0000 3d00 3601 2033 2020
0000b80 0000 0000 3e00 3601 2034 2020 0000 0000
0000b90 3f00 3601 2035 2020 0000 0000 4000 3601
0000ba0 2036 2020 0000 0000 4100 3601 2037 2020
0000bb0 0000 0000 4200 3601 2038 2020 0000 0000
0000bc0 4300 3601 2039 2020 0000 0000 4400 3701
0000bd0 2020 2020 0000 0000 0600 3701 2030 2020
0000be0 0000 0000 4500 3701 2031 2020 0000 0000
0000bf0 4600 0000 0000 0000 0000 0000 0000 0000
0000810 3737 2020 0000 0000 b000 3101 3837 2020
0000820 0000 0000 b100 3101 3937 2020 0000 0000
0000830 b200 3101 2038 2020 0000 0000 1100 3101
0000840 3038 2020 0000 0000 b300 3101 3138 2020
0000850 0000 0000 b400 3101 3238 2020 0000 0000
0000860 b500 3101 3338 2020 0000 0000 b600 3101
0000870 3438 2020 0000 0000 b700 3101 3538 2020
0000880 0000 0000 b800 3101 3638 2020 0000 0000
0000890 b900 3101 3738 2020 0000 0000 ba00 3101
00008a0 3838 2020 0000 0000 bb00 3101 3938 2020
00008b0 0000 0000 bc00 3101 2039 2020 0000 0000
00008c0 1200 3101 3039 2020 0000 0000 bd00 3101
00008d0 3139 2020 0000 0000 be00 3101 3239 2020
00008e0 0000 0000 bf00 3101 3339 2020 0000 0000
00008f0 c000 3101 3439 2020 0000 0000 c100 3101
0000900 3539 2020 0000 0000 c200 3101 3639 2020
0000910 0000 0000 c300 3101 3739 2020 0000 0000
0000920 c400 3101 3839 2020 0000 0000 c500 3101
0000930 3939 2020 0000 0000 c600 3201 2020 2020
0000940 0000 0000 0100 3201 2030 2020 0000 0000
0000950 1300 3201 2031 2020 0000 0000 1400 3201
0000960 2032 2020 0000 0000 1500 3201 2033 2020
0000970 0000 0000 1600 3201 2034 2020 0000 0000
0000980 1700 3201 2035 2020 0000 0000 1800 3201
0000990 2036 2020 0000 0000 1900 3201 2037 2020
00009a0 0000 0000 1a00 3201 2038 2020 0000 0000
00009b0 1b00 3201 2039 2020 0000 0000 1c00 3301
00009c0 2020 2020 0000 0000 0200 3301 2030 2020
00009d0 0000 0000 1d00 3301 2031 2020 0000 0000
00009e0 1e00 3301 2032 2020 0000 0000 1f00 3301
00009f0 2033 2020 0000 0000 2000 3301 2034 2020
0000a00 0000 0000 2100 3301 2035 2020 0000 0000
0000a10 2200 3301 2036 2020 0000 0000 2300 3301
0000a20 2037 2020 0000 0000 2400 3301 2038 2020
0000a30 0000 0000 2500 3301 2039 2020 0000 0000
0000a40 2600 3401 2020 2020 0000 0000 0300 3401
0000a50 2030 2020 0000 0000 2700 3401 2031 2020
0000a60 0000 0000 2800 3401 2032 2020 0000 0000
0000a70 2900 3401 2033 2020 0000 0000 2a00 3401
0000a80 2034 2020 0000 0000 2b00 3401 2035 2020
0000a90 0000 0000 2c00 3401 2036 2020 0000 0000
0000aa0 2d00 3401 2037 2020 0000 0000 2e00 3401
0000ab0 2038 2020 0000 0000 2f00 3401 2039 2020
0000ac0 0000 0000 3000 3501 2020 2020 0000 0000
0000ad0 0400 3501 2030 2020 0000 0000 3100 3501
0000ae0 2031 2020 0000 0000 3200 3501 2032 2020
0000af0 0000 0000 3300 3501 2033 2020 0000 0000
0000b00 3400 3501 2034 2020 0000 0000 3500 3501
0000b10 2035 2020 0000 0000 3600 3501 2036 2020
0000b20 0000 0000 3700 3501 2037 2020 0000 0000
0000b30 3800 3501 2038 2020 0000 0000 3900 3501
0000b40 2039 2020 0000 0000 3a00 3601 2020 2020
0000b50 0000 0000 0500 3601 2030 2020 0000 0000
0000b60 3b00 3601 2031 2020 0000 0000 3c00 3601
0000b70 2032 2020 0000 0000 3d00 3601 2033 2020
0000b80 0000 0000 3e00 3601 2034 2020 0000 0000
0000b90 3f00 3601 2035 2020 0000 0000 4000 3601
0000ba0 2036 2020 0000 0000 4100 3601 2037 2020
0000bb0 0000 0000 4200 3601 2038 2020 0000 0000
0000bc0 4300 3601 2039 2020 0000 0000 4400 3701
0000bd0 2020 2020 0000 0000 0600 3701 2030 2020
0000be0 0000 0000 4500 3701 2031 2020 0000 0000
0000bf0 4600 0000 0000 0000 0000 0000 0000 0000
0000c00 5e01 3701 2033 2020 0000 0000 4800 3701
0000c10 2034 2020 0000 0000 4900 3701 2035 2020
0000c20 0000 0000 4a00 3701 2036 2020 0000 0000
0000c30 4b00 3701 2037 2020 0000 0000 4c00 3701
0000c40 2038 2020 0000 0000 4d00 3701 2039 2020
0000c50 0000 0000 4e00 3801 2020 2020 0000 0000
0000c60 0700 3801 2030 2020 0000 0000 4f00 3801
0000c70 2031 2020 0000 0000 5000 3801 2032 2020
0000c80 0000 0000 5100 3801 2033 2020 0000 0000
0000c90 5200 3801 2034 2020 0000 0000 5300 3801
0000ca0 2035 2020 0000 0000 5400 3801 2036 2020
0000cb0 0000 0000 5500 3801 2037 2020 0000 0000
0000cc0 5600 3801 2038 2020 0000 0000 5700 3801
0000cd0 2039 2020 0000 0000 5800 3901 2020 2020
0000ce0 0000 0000 0800 3901 2030 2020 0000 0000
0000cf0 5900 3901 2031 2020 0000 0000 5a00 3901
0000d00 2032 2020 0000 0000 5b00 3901 2033 2020
0000d10 0000 0000 5c00 3901 2034 2020 0000 0000
0000d20 5d00 3901 2035 2020 0000 0000 5e00 3901
0000d30 2036 2020 0000 0000 5f00 3901 2037 2020
0000d40 0000 0000 6000 3901 2038 2020 0000 0000
0000d50 6100 3901 2039 2020 0000 0000 6200 0000
0000d60 0000 0000 0000 0000 0000 0000 0000 0000
*
0001000 2c80 0000 0000 0100 3101 3537 2020 0000
0001010 0000 ae00 0000 0000 0200 3701 2032 2020
0001020 0000 0000 4700 0000 0000 0300 0000 0000
0001030 0000 0000 0000 0000 0000 0000 0000 0000
-----------------------------------------------------
0000c10 2034 2020 0000 0000 4900 3701 2035 2020
0000c20 0000 0000 4a00 3701 2036 2020 0000 0000
0000c30 4b00 3701 2037 2020 0000 0000 4c00 3701
0000c40 2038 2020 0000 0000 4d00 3701 2039 2020
0000c50 0000 0000 4e00 3801 2020 2020 0000 0000
0000c60 0700 3801 2030 2020 0000 0000 4f00 3801
0000c70 2031 2020 0000 0000 5000 3801 2032 2020
0000c80 0000 0000 5100 3801 2033 2020 0000 0000
0000c90 5200 3801 2034 2020 0000 0000 5300 3801
0000ca0 2035 2020 0000 0000 5400 3801 2036 2020
0000cb0 0000 0000 5500 3801 2037 2020 0000 0000
0000cc0 5600 3801 2038 2020 0000 0000 5700 3801
0000cd0 2039 2020 0000 0000 5800 3901 2020 2020
0000ce0 0000 0000 0800 3901 2030 2020 0000 0000
0000cf0 5900 3901 2031 2020 0000 0000 5a00 3901
0000d00 2032 2020 0000 0000 5b00 3901 2033 2020
0000d10 0000 0000 5c00 3901 2034 2020 0000 0000
0000d20 5d00 3901 2035 2020 0000 0000 5e00 3901
0000d30 2036 2020 0000 0000 5f00 3901 2037 2020
0000d40 0000 0000 6000 3901 2038 2020 0000 0000
0000d50 6100 3901 2039 2020 0000 0000 6200 0000
0000d60 0000 0000 0000 0000 0000 0000 0000 0000
*
0001000 2c80 0000 0000 0100 3101 3537 2020 0000
0001010 0000 ae00 0000 0000 0200 3701 2032 2020
0001020 0000 0000 4700 0000 0000 0300 0000 0000
0001030 0000 0000 0000 0000 0000 0000 0000 0000
-----------------------------------------------------
4. 快速读取MYI文件
通过上一节的学习,我们虽然知道各位数据的意义 ,但由于参数太多,这里把经常读取的数据位置列一下:
KEYS : 索引的个数, 0X13,1个字节.
KEY ROOT : 索引的ROOT地址, 0X7C开始, 每个ROOT地址占8个字节 ;
如果地址0X13显示有多个索引的话,那么0X7C开始就有多个ROOT地址;
在上例地址为: 0000 0000 0000 1000
如果地址0X13显示有多个索引的话,那么0X7C开始就有多个ROOT地址;
在上例地址为: 0000 0000 0000 1000
HEADER LENGTH : 索引文件HEADER长度, 0X07,0X06,两个字节
一般索引文件头结束,下面就是具体的索引块.但紧跟着HEADER的不一定是ROOT块
一般索引文件头结束,下面就是具体的索引块.但紧跟着HEADER的不一定是ROOT块
KEY START : 索引块起始地址, 记录在HEADER->BASE的第一个8字节. (HEADER->BASE的起始地址记录在:0X0D,0X0C)
BLOCK SIZE : 索引块大小: 1024B
KEY RECORD LENGTH = Pointer + KEY SIZE
POINTER LENGTH = 定长: 4B (如果行数超过2**32,则需要更多位)
变长: 由于存的是文件的偏移量, 文件<=4G,则4位,如果数据文件>4G,则需要更多位
KEY SIZE = 根据KEY的长度+1B分隔符
5. 分析本例中的"枝"与"叶"
POINTER LENGTH = 定长: 4B (如果行数超过2**32,则需要更多位)
变长: 由于存的是文件的偏移量, 文件<=4G,则4位,如果数据文件>4G,则需要更多位
KEY SIZE = 根据KEY的长度+1B分隔符
5. 分析本例中的"枝"与"叶"
由于索引块的大小为1024,为了让索引能产生叶和枝,本例造了200个CHAR(5)的数据.
首先得到KEY ROOT ,在例中, 0X7C后的8个字节为: 0000 0000 0000 1000
我们从上面的数据中读取地址 00001000后的一个块:
----------------------------------------------
0001000 2c80 0000 0000 0100 3101 3537 2020 0000
0001010 0000 ae00 0000 0000 0200 3701 2032 2020
0001020 0000 0000 4700 0000 0000 0300 0000 0000
0001030 0000 0000 0000 0000 0000 0000 0000 0000
-----------------------------------------------
----------------------------------------------
0001000 2c80 0000 0000 0100 3101 3537 2020 0000
0001010 0000 ae00 0000 0000 0200 3701 2032 2020
0001020 0000 0000 4700 0000 0000 0300 0000 0000
0001030 0000 0000 0000 0000 0000 0000 0000 0000
-----------------------------------------------
先将ROOT块数据分列一下:
-----------------------------------------
802c --> 1 0000000 00101100 --> FLAG(1位,1代表是枝),索引块的长度(15位,0x2c=>46B)
00 00 00 00 00 01 01 31 37 35 20 20 00 00 00 00 00 ae
00 00 00 00 00 02 01 37 32 20 20 20 00 00 00 00 00 47
00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00
---------------------------------------------------------
-----------------------------------------
802c --> 1 0000000 00101100 --> FLAG(1位,1代表是枝),索引块的长度(15位,0x2c=>46B)
00 00 00 00 00 01 01 31 37 35 20 20 00 00 00 00 00 ae
00 00 00 00 00 02 01 37 32 20 20 20 00 00 00 00 00 47
00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00
---------------------------------------------------------
看第一行:
--------------------------------------------------------- 00 00 00 00 00 01 : 6个字节,大于该键值的KEY所在索引块序列号,索引块从0000 0000 0000开始编号.
01 31 37 35 20 20 00 00 : 8个字节,具体的KEY VALUE,"175__"
00 00 00 ae : 4个字节,在MYD文件中的POINTER.
---------------------------------------------------------
--------------------------------------------------------- 00 00 00 00 00 01 : 6个字节,大于该键值的KEY所在索引块序列号,索引块从0000 0000 0000开始编号.
01 31 37 35 20 20 00 00 : 8个字节,具体的KEY VALUE,"175__"
00 00 00 ae : 4个字节,在MYD文件中的POINTER.
---------------------------------------------------------
注意,由于"175__"这个KEY在ROOT有存储,他在其他索引块就不再存储了.
关于索引的搜索方法,我想应该于ORACLE大致一样:
比如,在本例中,等值搜索"24":
1) 先在枝块搜索第一个>="搜索值"的KEY, (上例中会找到第二行记录"24"2) 如果枝块上的KEY VALUE = "搜索值" , 返回结果,结束
3) 如果枝块上的KEY VALUE > "搜索值" , 找到该枝块上前一行记录,取得索引块的序号: 00 00 00 00 00 01
3) 根据索引块序号,取得一整个索引块,块内搜索.
4) 返回结果.
比如,在本例中,等值搜索"24":
1) 先在枝块搜索第一个>="搜索值"的KEY, (上例中会找到第二行记录"24"2) 如果枝块上的KEY VALUE = "搜索值" , 返回结果,结束
3) 如果枝块上的KEY VALUE > "搜索值" , 找到该枝块上前一行记录,取得索引块的序号: 00 00 00 00 00 01
3) 根据索引块序号,取得一整个索引块,块内搜索.
4) 返回结果.
在这里我们发现MYISAM的索引块没有指向下一个索引块的POINTER, 那么如果是RANGE访问.将通过枝块来定位到每一个索引块.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/703656/viewspace-1018471/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/703656/viewspace-1018471/