MongoDB数据库的索引操作(转)-阿里云开发者社区

开发者社区> 技术小美> 正文

MongoDB数据库的索引操作(转)

简介:
+关注继续查看

Mongodb数据库的索引操作很简单,只需要把作为条件的字段设置为索引即可

> use user
switched to db user
> show collections
system.indexes
u_info
u_setting
> db.system.indexes.find();   这是默认的索引(默认为_id为索引)
{ "name" : "_id_", "ns" : "user.u_info", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "name" : "_id_", "ns" : "user.u_setting", "key" : { "_id" : ObjectId("000000000000000000000000") } }

> db.u_info.insert({uid:1,name:"Falcon.C",address:"Beijing"});   
> db.u_info.insert({uid:2,name:"sexMan",address:"Wuhan"});    
> db.u_info.find();
{ "_id" : ObjectId("4b9cf280c84d7f20576c4df2"), "uid" : 1, "name" : "Falcon.C", "address" : "Beijing" }
{ "_id" : ObjectId("4b9cf284c84d7f20576c4df3"), "uid" : 2, "name" : "sexMan", "address" : "Wuhan" }

插入了2条记录,我们来把uid设置为索引字段:

> db.u_info.ensureIndex({uid:1});
> db.u_info.ensureIndex({name:1});
> db.system.indexes.find();
{ "name" : "_id_", "ns" : "user.u_info", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "name" : "_id_", "ns" : "user.u_setting", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "ns" : "user.u_info", "key" : { "uid" : 1 }, "name" : "uid_1" }
{ "ns" : "user.u_info", "key" : { "name" : 1 }, "name" : "name_1" }
>

这时我们看到多了刚才我们设置的那个字段,这样在查询的时候,如果查询条件有uid字段或name字段,则走索引来进行查询

有索引:

> db.u_info.find({name:"Falcon.C"});
{ "_id" : ObjectId("4b9cf280c84d7f20576c4df2"), "uid" : 1, "name" : "Falcon.C", "address" : "Beijing" }
> db.u_info.find({name:"Falcon.C"}).explain();
{
         "cursor" : "BtreeCursor name_1",
         "startKey" : {
                 "name" : "Falcon.C"
         },
         "endKey" : {
                 "name" : "Falcon.C"
         },
         "nscanned" : 1,
         "n" : 1,
         "millis" : 0,
         "allPlans" : [
                 {
                         "cursor" : "BtreeCursor name_1",
                         "startKey" : {
                                 "name" : "Falcon.C"
                         },
                         "endKey" : {
                                 "name" : "Falcon.C"
                         }
                 }
         ]
}

删除索引后:

> db.system.indexes.find();                   
{ "name" : "_id_", "ns" : "user.u_info", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "name" : "_id_", "ns" : "user.u_setting", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "ns" : "user.u_info", "key" : { "uid" : 1 }, "name" : "uid_1" }
{ "ns" : "user.u_info", "key" : { "name" : 1 }, "name" : "name_1" }
> db.u_info.dropIndex("name_1")
{ "nIndexesWas" : 3, "ok" : 1 }
> db.u_info.find({name:"Falcon.C"}).explain();
{
         "cursor" : "BasicCursor",
         "startKey" : {

         },
         "endKey" : {

         },
         "nscanned" : 2,
         "n" : 1,
         "millis" : 0,
         "allPlans" : [
                 {
                         "cursor" : "BasicCursor",
                         "startKey" : {

                         },
                         "endKey" : {

                         }
                 }
         ]
}
> db.system.indexes.find();                   
{ "name" : "_id_", "ns" : "user.u_info", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "name" : "_id_", "ns" : "user.u_setting", "key" : { "_id" : ObjectId("000000000000000000000000") } }
{ "ns" : "user.u_info", "key" : { "uid" : 1 }, "name" : "uid_1" }

通过以上可以看出,查询的条件中有索引时,查询走BtreeCursor 的索引,而没有索引时走BasicCursor


通常需要索引的字段是:
1.唯一键 _id 是默认被设置为索引的
2.需要被查找的字段应该建立索引,比如在find()里面的字段
3.需要被排序的字段应该建立索引。比如在sort()里面的字段

以上就是MongoDB

的索引操作


本文转自 不得闲 博客园博客,原文链接: http://www.cnblogs.com/DxSoft/archive/2010/10/21/1857364.html  ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#使用OleDB操作ACCESS插入数据时提示:参数 @p_Contract 没有默认值
C#使用OleDB操作ACCESS插入数据时提示:参数 @p_Contract 没有默认值 OleDbParameter param = new OleDbParameter("" + dc.ColumnName, dc.DataType); 出现该问题的原因是创建了Parameter,却没有为Parameter.value指定一个值。
832 0
通过DBCC整理Sqlserver数据库表索引碎片
昨天检查了一张效率极慢的表,两年多没有维护,逻辑扫描碎片高达99.81%,于是开始对这个表进行重点跟踪和记录日志。今天用DBCC SHOWCONTIG WITH TABLERESULTS 命令检查了一下所有表的概况,然后参照着MSDN对字段的说明,发现问题比较严重。
944 0
Lucene7.2.1系列(二)luke使用及索引文档的基本操作
它有以下功能: - 查看文档并分析其内容(用于存储字段) - 在索引中搜索 - 执行索引维护:索引运行状况检查;索引优化(运行前需要备份) - 从hdfs读取索引 - 将索引或其部分导出为XML格式 - 测试定制的Lucene分析工具 - 创建自己的插件
2141 0
MongoDB索引介绍
一、Single Field Indexes 示例文档: { "_id": ObjectId("570c04a4ad233577f97dc459"), "score": 1034, "location": { state: "NY", city: "New York" } } 1、语法: db.
763 0
Jdbc操作数据库  删
Jdbc操作数据库  删
20 0
+关注
6906
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载