使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。

一、前缀索引对覆盖索引的影响

使用前缀索引可能会增加扫描行数,这会影响到性能。

使用前缀索引就用不上覆盖索引对查询性能的优化了,这也是你在选择是否使用前缀索引时需要考虑的一个因素。

二、其他方式

索引选取的越长,占用的磁盘空间就越大,相同的数据页能放下的索引值就越少,搜索的效率也就会越低。

  • 使用倒序存储
  • 使用 hash 字段

使用倒序存储和使用 hash 字段这两种方法的异同点。
相同点:都不支持范围查询。
区别:

  • 1.从占用的额外空间来看,倒序存储方式在主键索引上,不会消耗额外的存储空间,而 hash 字段方法需要增加一个字段。
  • 2.在 CPU 消耗方面,倒序方式每次写和读的时候,都需要额外调用一次 reverse 函数,而 hash 字段的方式需要额外调用一次 crc32() 函数。
  • 3.从查询效率上看,使用 hash 字段方式的查询性能相对更稳定一些。

三、小结

字符串字段创建索引的方式:

  • 1.直接创建完整索引,这样可能比较占用空间;
  • 2.创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引;
  • 3.倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题;
  • 4.创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。