前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB索引

MongoDB索引

作者头像
字母哥博客
发布2020-09-23 11:15:54
1.6K0
发布2020-09-23 11:15:54
举报
文章被收录于专栏:写字母的代码哥

MongoDB索引

  • 优点:索引建的好,可以提高查询效率几个数量级
  • 缺点:索引建的越多,在插入,更新,删除的时候产生额外开销越大。

使用上的限制

  • 索引不能被以下的查询使用: 1.正则表达式及非操作符,如 nin, not, 等。 2.算术运算符,如

MongoDB索引分类

  • _id默认的单字段唯一索引
  • 单字段索引:建立在集合单一字段上的索引
  • 复合索引:建立在集合多个字段上的索引
  • Multikey索引:如果一个字段是一个数组,在这个字段上面创建索引。Mongodb会自己决定,是否要把这个索引建成Multikey Index。
  • 地理空间索引:基于坐标平面查找的索引(使用场景较为特殊,暂不探讨)
  • 文本索引:支持文档内的字符串查找
  • hash索引:Hash索引对key进行hash计算然后创建索引,该索引只支持等于查询,不支持区间查询。

单字段索引

创建索引的api,3.0之后使用createIndex,ensureIndex已经废弃 * 对于单字段索引,排序的顺序是升序还是降序无关紧要

文档字段索引
代码语言:javascript
复制
db.records.createIndex( { userid: 1 } )
//下列查询语句可以使用到该索引
db.records.find( { userid: 2 } )
db.records.find( { userid: { $gt: 10 } } )
子文档字段索引
代码语言:javascript
复制
db.people.createIndex( { "address.zipcode": 1 } )
子文档索引
代码语言:javascript
复制
//示例数据
{
    _id: ObjectId(...),
    metro: {
        city: "New York",
        state: "NY"
    },
    name: "Giant Factory"
}
//创建索引
db.factories.createIndex( { metro: 1 } )
//下列查询会用到该索引
db.factories.find( { metro: { city: "New York", state: "NY" } } )
//该查询不会用到子文档索引,因为子文档字段顺序不匹配
db.factories.find( { metro: { state: "NY", city: "New York" } } )

复合索引

代码语言:javascript
复制
//创建复合索引
db.events.createIndex( { "username" : 1, "date" : -1 } )
//下面2个查询将使用上面的索引(一升一降)
db.events.find().sort( { username: 1, date: -1 } )
db.events.find().sort( { username: -1, date: 1 } )
//下面这个查询将使用不到上面的索引
db.events.find().sort( { username: 1, date: 1 } )
  • 如果选择了如何复合索引,实际上可以支持三种查询 { "item": 1, "location": 1, "stock": 1 }
    1. { "item": 1}
    2. { "item": 1, "location": 1}
    3. { "item": 1, "location": 1, "stock": 1 }

MultiKey索引

代码语言:javascript
复制
//创建MultiKey索引
db.inventory.createIndex( { ratings: 1 } )
//精确匹配查找ratings数组为5,9
db.inventory.find( { ratings: [ 5, 9 ] } )
//找到数据:
{ _id : 5, type : "food" , item : "bbb" ,ratings : [ 5 , 9 ] }

文本索引

代码语言:javascript
复制
//在comments字段上建立文本索引
db.reviews.createIndex( { comments: "text" } )
//在subject和comments字段上建立文本索引
db.reviews.createIndex(
    {
    subject: "text",
    comments: "text"
    }
)
//在文档内所有字符串类型的字段上建立文本索引
db.collection.createIndex( { "$**": "text" } )

哈希索引

代码语言:javascript
复制
//在字段a上建立hash索引
db.active.createIndex( { a: "hashed" } )

喜欢 (4)or分享 (0)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-02-04),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB索引
  • 使用上的限制
  • MongoDB索引分类
    • 单字段索引
      • 文档字段索引
      • 子文档字段索引
      • 子文档索引
    • 复合索引
      • MultiKey索引
        • 文本索引
          • 哈希索引
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档