mongoDB的索引 通过B-Tree索引来实现

  次阅读 作者:智能小宝 来源:互联网 2016-01-26 10:44 我要评论(0)

索引通常能够极大的提高查询的效率。在系统中使用查询时,应该考虑建立相关的索引。

索引是一种数据结构,他搜集一个集合中文档特定字段的值。MongoDB的查询优化器能够

使用这种数据结构来快速的对集合(collection)中的文档(collection)进行寻找和排序,

准确来说,这些索引是通过B-Tree索引来实现的。

1.创建简单索引

数据准备index.js,创建books文档并插入200000条数据,如下:

for(var i=0;i<200000;i++){

db.books.insert({number:i,name:i+"book"})

}

1.先检验一下查询性能

var start = new Date()

db.books.find({number:65871})

var end = new Date()

end - start

2.为number 创建索引

db.books.ensureIndex({number:1})

3.再执行第一部的代码可以看出有数量级的性能提升

2.索引使用需要注意的地方

1.创建索引的时候注意1是正序创建索引-1是倒序创建索引

2.索引的创建在提高查询性能的同事会影响插入的性能对于经常查询少插入的文档可以考虑用索引

3.符合索引要注意索引的先后顺序

4.每个键全建立索引不一定就能提高性能呢索引不是万能的

5.在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能

3.创建索引同时指定索引的名字

db.books.ensureIndex({name:-1},{name: bookname })

4.唯一索引

4.1如何解决文档books不能插入重复的数值

建立唯一索引

db.books.ensureIndex({name:-1},{unique:true})

试验

db.books .insert({name: 1book })

5.剔除重复值

5.1如果建议唯一索引之前已经有重复数值如何处理

db.books.ensureIndex({name:-1},{unique:true,dropDups:true})

6.Hint

6.1如何强制查询使用指定的索引呢?

db.books.find({name:"1book",number:1}).hint({name:-1})

指定索引必须是已经创建了的索引

7.Expain

7.1如何详细查看本次查询使用那个索引和查询数据的状态信息

db.books.find({name:"1book"}).explain()

返回结果,如下所示:

> db.books.find({name:"1book"}).explain()

{

"cursor" : "BtreeCursor name_1",

"isMultiKey" : false,

"n" : 1,

"nscannedObjects" : 1,

"nscanned" : 1,

"nscannedObjectsAllPlans" : 1,

"nscannedAllPlans" : 1,

"scanAndOrder" : false,

"indexOnly" : false,

"nYields" : 0,

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...