怎么给字符串加索引
加索引的原则:区分度越高越好,区分度高,意味着重复的值少使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。
email的例子
zhangsan@qq.com
zhangsi@qq.com
zhangwu@qq.com
索引1 :email
索引2: email(7)
根据情况使用索引2,因为索引长度越长,占用磁盘空间越大身份证例子
由于身份证前几位都是一样的,重复值高,需要怎么来建立索引?
1.倒序存储reverse('input_id_card_string')
2.hash字段
倒序存储和使用hash字段这两种方法的异同点:
1.都不支持范围查询,只支持等值查询
2.在CPU消耗方面,倒序方式每次写和读的时候,都需要额外调用一次reverse函数,而hash字段的方式需要额外调用一次crc32()函数。如果只从这两个函数的计算复杂度来看的话,reverse函数额外消耗的CPU资源会更小些
3.从查询效率上看,使用hash字段方式的查询性能相对更稳定一些。因为crc32算出来的值虽然有冲突的概率,但是概率非常小,可以认为每次查询的平均扫描行数接近1。而倒序存储方式毕竟还是用的前缀索引的方式,也就是说还是会增加扫描行数。 小结:
1.直接创建索引,这样可能比较占用空间
2.创建前缀索引,节约空间,但会增加查询的次数,并且不能使用到覆盖索引
3.倒序储存,在创建前缀索引,可以绕过字符串前缀区分度不够的问题
4.hash索引,查询性能稳定,有额外的存储和计算性能
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]