具体见:
http://www.mysqlperformanceblog.com/2006/05/13/to-pack-or-not-to-pack-myisam-key-compression/
(1)key compress应用在块范围
(2)块中的第一个索引值被完全的存储,第二个索引值包括和前一个索引相同的值+和前一个索引不同的值
(3)例如:块中的第一个索引为aaaaaa,第二个索引为aaaaab;则key compress算法会记录为:aaaaaa和<5>b
(4)前向索引扫描是很快的(read_next),因为在读下一个值时,前一个值已知,不需要另行解压前一个值
(5)反向索引扫描是慢的(read_prev),因为在反向读下一个值时,必须先解压前一个值;而解压前一个值,必须解压这个块
(6)随机单行扫描是慢的,因为需要解压此行所在的块才能得到这个key值
(7)页更大意味着更慢的索引扫描;
(8)PACK_KEYS=0|1|DEFAULT
0--关闭对所有的key进行compress;1--强制对所有的key进行compress;DEFAULT--仅压缩字符列的key,数字和其他类型不进行compress
(9)myisam默认将压缩字符key,而不压缩integer key,所以使用字符key进行join比integer key更慢,这是因为需要解压缩的缘故
(10)总结:
a) key prefix compress节省了空间
b) 避免使用字符key进行join
c) 在字符key上的反向索引扫描是更慢的
d) PACK_KEYS=1减慢了你使用integer key进行join
e) PACK_KEYS=0可以增加你的索引大小达到10倍