1.直接创建完整索引,这样可能比较占用空间;
2.创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引(即使一个字符串的长度小于前缀索引长度,也需要进行回表判断);
3.倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题,不支持范围查找;
4.创建 hash 字段索引,查询性能稳定,有额外的存储和计算消耗,不支持范围扫描。
倒序索引和hash字段索引的区别
1.从占用的额外空间来看,倒序存储方式不会消耗额外的存储空间,而 hash 字段方法需要增加一个字段。当然,倒序存储方式使用 4 个字节的前缀长度应该是不够的,如果再长一点,这个消耗跟额外这个 hash 字段也差不多抵消了。
2.在 CPU 消耗方面,倒序方式每次写和读的时候,都需要额外调用一次 reverse 函数,而 hash 字段的方式需要额外调用一次 crc32() 函数。如果只从这两个函数的计算复杂度来看的话,reverse 函数额外消耗的 CPU 资源会更小些。
3.从查询效率上看,使用 hash 字段方式的查询性能相对更稳定一些。因为 crc32 算出来的值虽然有冲突的概率,但是概率非常小,可以认为每次查询的平均扫描行数接近 1。而倒序存储方式毕竟还是用的前缀索引的方式,也就是说还是会增加扫描行数。
本文探讨了四种数据库索引策略:直接索引、前缀索引、倒序存储加前缀索引以及哈希字段索引。每种策略在空间占用、CPU消耗和查询效率上各有优劣。直接索引占用空间大;前缀索引节省空间但增加扫描次数;倒序存储用于提高区分度,不支持范围查询;哈希字段索引提供稳定查询性能,但不支持范围扫描。选择哪种策略需根据实际需求权衡。
1384

被折叠的 条评论
为什么被折叠?



