压缩(前缀压缩)索引

MyISAM存储引擎通过前缀压缩来减小索引大小,优化内存利用率。它主要针对字符串类型,但也支持整数压缩。索引块中,除首个值完全保存外,后续值仅存储与首个值的差异部分。例如,'perform'后的'formance'被压缩为'7,ance'。行指针同样采用此压缩技术。可通过PACK_KEYS参数在创建表时定制索引压缩策略。" 88023843,8207940,HttpClient 与 CloseableHttpClient 的差异分析,"['HttpClient', '网络请求', 'API接口', '资源管理', 'Java']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyISAM使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,这在某些情况下能极大地提高性能。

默认只压缩字符串,但通过参数设置也可以对整数做压缩

MyISAM压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其他值和第一个值进行比较得到相同前缀的字节数和剩余的不同后缀部分,把这部分存储起来即可

例如,索引块中的第一个值是“perform“,第二个值是”performance“,那么第二个值的前缀压缩后存储的是类似”7,ance“这样的形式。MyISAM对行指针也采用类似的前缀压缩方式。 

压缩块使用更少的空间,代价是某些操作可能更慢。因为每个值的压缩前缀都依赖前面的值,所以MyISAM查找时无法在索引块使用二分查找而只能从头开始扫描。正序的扫描速度还不错,但是如果是倒序扫描——例如ORDER BY DESC——就不是很好了。所有在块中查找某一行的操作平均都需要扫描半个索引块。 
测试表明,对于CPU密集型应用,因为扫描需要随机查找,压缩索引使得MyISAM在索引查找上要慢好几倍。压缩索引的倒序扫描就更慢了。压缩索引需要在CPU内存资源与磁盘之间做权衡。压缩索引可能只需要十分之一大小的磁盘空间,如果是I/O密集型应用,对某些查询带来的好处会比成本多很多。 

可以在CREATE TABLE语句中指定PACK_KEYS参数来控制索引压缩的方式。

-------《高性能MySQL》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值