加索引的原则:
使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。
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索引,查询性能稳定,有额外的存储和计算性能
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |