MongoDB索引操作和执行计划Explain()详解

一、索引操作

说明,下面的内容举例时,以"dailyTrip"collection为例。 字段内容如下:

{
   
    "_id" : ObjectId("63ec5a971ddbe429cbeeffe3"),  // object id
    "car_type" : "Gett",  // string
    "date" : ISODate("2016-04-01T00:00:00.000+0000"),  //ISODate
    "trips" : 0.0,  // number
    "monthly" : "NA", // string
    "parent_type" : "Ride-hailing apps", // string
    "monthly_is_estimated" : true, // boolean
    "geo" : {
     // object 
        "$concat" : [  // array 
            "$parent_type",
            "$grouping"
        ]
    }
}

执行看看有5.17万条数据

1. 索引类型
  • 单列索引: 在一个字段上创建的索引。
  • 复合索引:由多个字段组合一起创建的索引。使用的时候要注意最左前缀原则,避免索引无法命中(失效)。
  • 文本索引(全文索引)和空间索引(GEO索引),不常用,这里不讲,具体自行网上查询。
2. 查看

语法:

db.Collection.getIndexs();

返回内容说明:

[  // 返回一个数组,内容是所有索引
    {
   
        "v" : 2.0,  // 索引版本,可忽略
        "key" : {
     // 索引加在哪个字段,以及排序
            "_id" : 1.0  // _id 是字段, 1.0是正序(升序), -1.0是倒序(倒序)
        },
        "name" : "_id_"  // 索引名,如果添加的时候没有指定,Mongo会自动生成。 
    }
]

举例:

可以看到返回一个name为 id的索引。 作用于 _id上, 升序排列。

3. 创建

语法:

db.collection.createIndex(keys, options)
 
// 组合索引 
db.collection.createIndex( {
    <field1>: <type>, <field2>: <type2>, ... } )  // 其中 <fieldN>是字段名 <typeN>是排序
 
注意:3.0.0 版本之前创建索引方法为 db.collection.ensureIndex()5.0之后ensureIndex() 已被移除。

举例:

// 创建单字段索引
db.dailyTrip.createIndex({"car_type":1});
 
// 返回结果 
{
    "numIndexesBefore" : 1.0,  // 新建索引前的索引数
    "numIndexesAfter" : 2.0,  // 新建索引后的索引数  
    "createdCollectionAutomatically" : false,   // 一般情况下,如果该集合存在,这里就是返回false。如果指定的集合不存在,MongoDB 默认情况下会自动创建该集合,并在该集合上创建索引,此时返回true。
    "ok" : 1.0  // 创建结果 1.0则是成功。返回0则说明报错了。
}
 
// 如果创建的字段的索引已经存在,则返回如下
{
    "numIndexesBefore" : 2.0,
    "numIndexesAfter" : 2.0,
    "note" : "all indexes already exist", // 提示已经存在
    "ok" : 1.0
}
 
// 创建复合索引
db.dailyTrip.createIndex({"parent_type":1, "car_type":1})
// 也可以指定自定义索引名
db.dailyTrip.createIndex({"parent_type":1, "car_type":1}, { name: "inx_parantType_carType" })  // 这里自己试验
 
// 来自官方文档 https://www.mongodb.com/docs/manual/reference/command/createIndexes/ 

创建完毕后,再次查看当前索引情况

4. 删除

语法:

删除指定集合中所有索引:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值