mongoDB中常见的几种索引

数据库中,会有好几种索引,比如唯一索引,普通字段上的索引等

1. 唯一索引

和mysql中唯一索引用法类似, 用来保证集合中每一个document的指定键都有唯一值,比如 Id字段,
同样,如果某一个字段设置了唯一索引,那么只可以插入相同的值一次,如果有一个null,则不允许再次插入该键为null的记录 比如一个网站注册用户,可以用手机号或者邮箱,然后手机号和邮箱需要做唯一索引,此时就会存在一个问题,

db.user.ensureIndex({mobile:1,email:1},{unique:true})
//如果a是用手机号注册的,没填邮箱信息,那么邮箱保存的是null
//此时b也想有手机号注册,但是无法注册,因为它的邮箱也是null
//这就是唯一索引的缺点,可以结合稀疏索引使用

但是,在mongoDB中, 有个特殊情况, 如果某个键的索引条目超过了 索引储桶的大小限制,那么这个条目就不会包含在索引中,换句话说,他就不会受到索引约束, 也就是超过8KB大小的键不会受到唯一索引的约束

  • 复合唯一索引
    唯一索引,可以建立在单个字段,也可以建立在多个字段,比如
    {name:1,age:1} //在这个复合键上建立唯一索引
    
  • 在已有的集合创建唯一索引,可能失败
    已经存在的集合,有可能存在重复值,这时候创建唯一索引,有可能创建失败,可以考虑先删除重复值
2.稀疏索引
  • 注意
    mongodb中稀疏索引和关系型数据库中的系数索引完全不同的概念, mongodb中稀疏索引只是不需要将每个document作为索引条目
    稀疏索引就是 : 仅包含具有索引字段的文档的条目 ,比如下边的数据中

    { name : 'abc',age : 14 },
    { name : 'def',age : 16 },
    { name : 'abc',age : 14 ,class:'一班'},
    { name : 'def',age : 16class:'二班'}
    

    如果对class建立稀疏索引,那么查询的时候,只会在有class属性的document中进行检索

  • 使用方式
    使用sparse可以创建稀疏索引

    db.user.ensureIndex({name:1},{"sparse":true})
    

    可以利用稀疏索引 + 唯一索引 实现 那种,”只有存在才可以唯一的唯一索引“

    db.user.ensureIndex({name:1},{"unique": true,"sparse":true})
    
3. mongo中索引默认命名
  • 一般规则
    所以都会有一个名称,用于唯一表示这个索引,也可以用来服务器端删除或者操作,默认命名规则是
    keyName1_dir1_keyname2_dir2 // keyname是键的名字,dir是升序还是降序,比如
    name_1_age_-1
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值