day-11-怎么给字符串字段加索引
使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。
一、前缀索引对覆盖索引的影响
使用前缀索引可能会增加扫描行数,这会影响到性能。
使用前缀索引就用不上覆盖索引对查询性能的优化了,这也是你在选择是否使用前缀索引时需要考虑的一个因素。
二、其他方式
索引选取的越长,占用的磁盘空间就越大,相同的数据页能放下的索引值就越少,搜索的效率也就会越低。
- 使用倒序存储
- 使用 hash 字段
使用倒序存储和使用 hash 字段这两种方法的异同点。
相同点:都不支持范围查询。
区别:
- 1.从占用的额外空间来看,倒序存储方式在主键索引上,不会消耗额外的存储空间,而 hash 字段方法需要增加一个字段。
- 2.在 CPU 消耗方面,倒序方式每次写和读的时候,都需要额外调用一次 reverse 函数,而 hash 字段的方式需要额外调用一次 crc32() 函数。
- 3.从查询效率上看,使用 hash 字段方式的查询性能相对更稳定一些。
三、小结
字符串字段创建索引的方式:
- 1.直接创建完整索引,这样可能比较占用空间;
- 2.创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引;
- 3.倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题;
- 4.创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 张晓风的博客!
评论