美文网首页程序员
「Mysql索引原理(九)」前缀压缩索引

「Mysql索引原理(九)」前缀压缩索引

作者: 源码之路 | 来源:发表于2020-06-20 18:49 被阅读0次

       MyISAM使用前缀压缩来减少索引的大小,从而可以让更多的索引可以放入内存中,这在某些情况下能极大地提高性能。默认只压缩字符串,但通过参数设置也可以对整数做压缩。MyISAM压缩每个索引块的方法是,完全保存索引块中的第一个值。然后将其他值和第一个值进行比较得到相同前缀的字节数和剩余的不同后缀部分,把这部分存储起来即可。
       例如,索引块中的第一个值是“perform”,第二个值是“performance”,那么第二个值的前缀压缩后存储的是类似“7,ance”这样的形式。MyISAM对行指针也采用类似的前缀压缩方式。
       压缩块使用更少的空间,代价是某些操作可能更慢。因为每个值的压缩前缀都依赖前面的值,所以MyISAM查找时无法在索引块使用二分查找而只能从头开始扫描。正序的扫描速度还不错,但是如果是倒序扫描——例如order by desc就不是很好找。所有在块中查找某一行的操作平均都需要扫描半个索引快。
       对于CPU密集型应用,因为扫描需要随机查找,压缩索引使得MyISAM在索引查找上要慢好几倍。压缩索引的倒序扫描就更慢了。压缩索引需要在CPU内存资源与磁盘之间做平衡。压缩索引可能只需要十分之一大小的磁盘空间,如果是I/O密集型应用,对某些查询带来的好处会比成本多很多。
       可以在create table语句中指定pack_keys参数来控制索引压缩的方式。

CREATE TABLE myisam (
              myisam varchar(255) DEFAULT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;

PACK_KEYS [=] {0 | 1 | DEFAULT}

0: 表示关闭索引压缩

1: 表示开启数字和字符串压缩

default:表示只压缩超长字符串char和varchar列

如果建表时不指定这个选项,那么默认只压缩字符串,不压缩数字

相关文章

  • 「Mysql索引原理(九)」前缀压缩索引

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

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • MySQL索引机制(详细+原理+解析)

    一.索引的类型与常见的操作 前缀索引 MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也...

  • Mysql前缀索引长度确定方法

    MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也有它的坏处:MySQL 不能在 ORD...

  • Mysql索引失效

    mysql 索引失效的原因有哪些?Mysql索引失效的原因 1、最佳左前缀原则——如果索引了多列,要遵守最左前缀原...

  • 索引最左前缀匹配

    最左前缀原理 联合索引中查找遵循最左前缀原理:例如,建立如下(a,b,c,d)的联合索引,索引结构会按照a,b,c...

  • MySQL索引详解(四)BTree为什么更适合做索引结构

    根据文章MySQL索引详解(三)索引的底层原理,了解了MySQL的索引实现原理,那么为什么在众多的数据结构中,索引...

  • MySQL索引

    MySQL索引 索引介绍 索引原理与分析 组合索引 索引失效分析 索引介绍 什么是索引索引:包括聚集索引、覆盖索引...

  • MySQL索引背后的数据结构及算法原理

    参考来源 mysql索引分析 MySQL索引背后的数据结构及算法原理 MySQL中EXPLAIN命令详解 索引连接...

  • 索引

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。 最左前缀匹配原则 在mysql建立联合索引时...

网友评论

    本文标题:「Mysql索引原理(九)」前缀压缩索引

    本文链接:https://www.haomeiwen.com/subject/rusgxktx.html