添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
索引是提高查询查询效率最有效的手段。索引是一种特殊的数据结构,索引以易于遍历的形式存储了数据的部分内容(如:一个特定的字段或一组字段值),索引会按一定规则对存储值进行排序,而且索引的存储位置在内存中,所在从索引中检索数据会非常快。如果没有索引,MongoDB必须扫描集合中的每一个文档,这种扫描的效率非常低,尤其是在数据量较大时。

  1. 创建/重建索引
  2. 查看索引
  3. 删除索引

1. 创建/重建索引 MongoDB全新创建索引使用 ensureIndex() 方法,对于已存在的索引可以使用 reIndex() 进行重建。

1.1 创建索引 ensureIndex() MongoDB创建索引使用 ensureIndex() 方法。

db.COLLECTION_NAME.ensureIndex(keys[,options])
  • keys ,要建立索引的参数列表。如: {KEY:1} ,其中 key 表示字段名, 1 表示升序排序,也可使用使用数字 -1 降序。
  • options ,可选参数,表示建立索引的设置。可选值如下:
    • background ,Boolean,在后台建立索引,以便建立索引时不阻止其他数据库活动。默认值 false。
    • unique ,Boolean,创建唯一索引。默认值 false。
    • name ,String,指定索引的名称。如果未指定,MongoDB会生成一个索引字段的名称和排序顺序串联。
    • dropDups ,Boolean,创建唯一索引时,如果出现重复删除后续出现的相同索引,只保留第一个。
    • sparse ,Boolean,对文档中不存在的字段数据不启用索引。默认值是 false。
    • v ,index version,索引的版本号。
    • weights ,document,索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。

如,为集合 sites 建立索引:

> db.sites.ensureIndex({name: 1, domain: -1})
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1
注意:1.8版本之前创建索引使用createIndex()1.8版本之后已移除该方法

1.2 重建索引reIndex()

db.COLLECTION_NAME.reIndex()
如,重建集合sites的所有索引:

> db.sites.reIndex()
  "nIndexesWas" : 2,
  "nIndexes" : 2,
  "indexes" : [
	  "key" : {
		"_id" : 1
	  "name" : "_id_",
		"ns" : "newDB.sites"
	  "key" : {
		"name" : 1,
		"domain" : -1
	  "name" : "name_1_domain_-1",
	  "ns" : "newDB.sites"
  "ok" : 1
2. 查看索引
MongoDB提供了查看索引信息的方法:getIndexes()方法可以用来查看集合的所有索引,totalIndexSize()查看集合索引的总大小,db.system.indexes.find()查看数据库中所有索引信息。

2.1 查看集合中的索引getIndexes()

db.COLLECTION_NAME.getIndexes()
如,查看集合sites中的索引:

>db.sites.getIndexes()
	"v" : 1,
	"key" : {
	  "_id" : 1
	"name" : "_id_",
	"ns" : "newDB.sites"
	"v" : 1,
	"key" : {
	  "name" : 1,
	  "domain" : -1
	"name" : "name_1_domain_-1",
	"ns" : "newDB.sites"
2.2 查看集合中的索引大小totalIndexSize()
db.COLLECTION_NAME.totalIndexSize()
如,查看集合sites索引大小:

> db.sites.totalIndexSize()
16352
2.3 查看数据库中所有索引db.system.indexes.find()
db.system.indexes.find()
如,当前数据库的所有索引:

> db.system.indexes.find()
3. 删除索引 不在需要的索引,我们可以将其删除。删除索引时,可以删除集合中的某一索引,可以删除全部索引。

3.1 删除指定的索引dropIndex()

db.COLLECTION_NAME.dropIndex("INDEX-NAME")
如,删除集合sites中名为"name_1_domain_-1"的索引:

> db.sites.dropIndex("name_1_domain_-1")
{ "nIndexesWas" : 2, "ok" : 1 }
3.3 删除所有索引dropIndexes()
db.COLLECTION_NAME.dropIndexes()
如,删除集合sites中所有的索引:

> db.sites.dropIndexes()
  "nIndexesWas" : 1,
  "msg" : "non-_id indexes dropped for collection",
  "ok" : 1
							【使用explain和hint】前面讲高级查询选项时,提到过"$explain" 和 ”$hint“可以作为包装查询的选项关键字使用,其实这两个本身就可以作为操作游标的函数调用!游标调用explain...
                        						来自:	 老鹰之歌的学习笔记
							前一篇简单介绍了索引,并给出了基本的索引使用,这一次,我们进一步说一下MongoDB中的索引,包括如何查看查询是否走索引,如何管理索引和地理空间索引等。
【使用explain和hint】
                        						来自:	 欧辰的专栏
							spring-data-mongodb主要有以下注解 
主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束。如果自己不设置@Id主键,mongo会自动生成一个唯...
                        						来自:	 RBaiQuan的博客
							对于我喜欢和常用的网站我会特别介绍一下的,其他大家自己看着办吧。
还有一点,一般专门的BT论坛会比这些搜索引擎收录快,发布站式的BT站也会比抓取的搜索引擎收录快。BT发布站我也会另外开的,这里偶尔带...
                        						来自:	 roslei的博客
  索引本质上是树,最小的值在最左边的叶子上,最大的值在最右边的叶子上,使用索引可以提高查询速度(而不用全表扫描),也可以预防脏数据的插入(如唯一索引)
索引即支持普通字段也支持内嵌文档中某...
                        						来自:	 vbirdbest的博客
							索引 : 指的是建立指定键值及所在文档存储位置的对照关系清单。使用索引可以更方便我们快速查找,减少遍历,提高效率。如果不适用索引则在查找中使用全表扫描,效率较低创建索引:ensureIndex给stu...
                        						来自:	 pythondafahao的博客
							一:索引的种类1:_id索引:是绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段 
2:单键索引:1.单键索引是最普通的索引
2.与_id索引不同,单键索...
                        						来自:	 WuTing的专栏
							mongodb 提供了一种原子性的操作,findandmodify,但它只满足原子性,不具备事务的特性,事务具有四种特性:原子性,隔离性,一致性,持久性。findAndModify在高并发下有可能会出...
                        						来自:	 u013015681的博客
							该如何建立有效索引现在有这么一个查询条件,数据库里的数据总量是60087条数据:db.t_f10_company_executives_01.find({symbol:"000002",status:...
                        						来自:	 山鬼谣的专栏
							Node.js 操作Mongodb1.简介官网英文文档  https://docs.mongodb.com/manual/  这里几乎什么都有了MongoDB is open-source docum...
                        						来自:	 github_39294367的博客
							mongodb索引规则基本上与传统的关系库一样,大部分优化MySQL/Oracle/SQLite索引的技巧也适用于mongodb。一、 为什么用索引:当查询中用到某些条件时,可以对该键建立索引,以提高...
                        						来自:	 longzhiwen888的专栏
							在数据量超大的情形下,任何数据库系统在创建索引时都是一个耗时的大工程。MongoDB也不例外。因此,MongoDB索引的创建有两个选择,一个是前台方式,一个是后台方式。那这两种方式有什么差异呢,在创建...
                        						来自:	 wll的专栏
							在数据量超大的情形下,任何数据库系统在创建索引时都是一个耗时的大工程。MongoDB也不例外。因此,MongoDB索引的创建有两个选择,一个是前台方式,一个是后台方式。那这两种方式有什么差异呢,在创建...
                        						来自:	 乐沙弥的世界
							这里的示例代码都是简要代码,详细代码可以参考我打包好的代码,地址:百度云 mongo-demo.rar
MongoDB 的索引太复杂了,这里就介绍下,基本够用;如果有开发需求,那么你还是仔细看看,功能...
                        						来自:	 Duanc 的博客
							在MongoDB上建索引可能会对MongoDB集群对可用性产生负面影响。在生产服务上,如果针对一个大集合触发建立索引,且在前台运行,你可能会发现,在索引建完之前,整个集群都无影响。在一个大集合上,这个...
                        						来自:	 zhuchunyan_aijia的博客
							问题:之前在另一台电脑已经搭好的项目,在跑上传并储存数据到数据库的时候,总耗时只要10s。后来将项目重新部署到一个新电脑上面,重新搭好环境,跑同一段代码的时候,总耗时变成;了30s。经过研究,发现代码...
                        						来自:	 Jamin2018的博客
							需要电子档书籍或者源码可以Q群:828202939   希望可以和大家一起学习、一起进步!!
如有错别字或有理解不到位的地方,可以留言或者加微信15250969798,博主会及时修改!!!!!
                        						来自:	 谷子的博客
							MongoDB的索引的机制与普通数据库基本相似,主要有如下几部分:单字段索引MongoDB默认为所有集合创建了一个_id字段的单字段索引,该索引唯一,且不能删除(_id为集合的主键)索引的创建方法:d...
                        						来自:	 网络
							索引能够提高数据库的查询效率,没有索引的话,查询会进行全表扫描(scan every document in a collection),严重降低了查询效率,故学会使用索引将是一项重要技能。...
                        						来自:	 zhglance的专栏
#include<iostream>
#include<algorithm>
#include<cstdio>
                        						来自:	 紫芝的博客
							前一篇简单介绍了索引,并给出了基本的索引使用,这一次,我们进一步说一下MongoDB中的索引,包括如何查看查询是否走索引,如何管理索引和地理空间索引等。
【使用explain和hint】
前面讲高...
                        						来自:	 DrifterJ's Stash
							今天又补充了一些关于查询的内容在昨天的博客里:$elemMatch 根据数组对象中的条件进行查询
分页与排序  相关的内容,大家可以去看一下。今天主要说MongoDB中索引相关的内容:
一、先来看...
                        						来自:	 老虎帅呆了的博客
							索引简介MongoDB同传统数据库索引一样,同样使用的是B-tree索引,绝大多数优化MySQL/Oracle/SQLlite索引技术也同样适用于MongoDB.创建索引使用ensureIndex方法...
                        						来自:	 我思,故我在!--My data life
							db.getCollection('user').find({"$or":[{"userNo":"20180326001"},{"...
                        						来自:	 qq_22650745的博客
							本篇博文讲解了在分片集群上的查询和索引,在mongos上创建的索引会在每个分片上单独执行,且最终每个分片上的索引是一致的,用于确保查询效率一致,而且分片集群上只值允许在_id和分片键上创建唯一性索引。...
                        						来自:	 wanght89的专栏
							yii框架  yii/mongo/Query 需要更新集合中特定的字段 ,Query里面查了查只有 mogify  折腾了半天,只是可以整个文档的替代 ,不信邪 ,跟进去看源码,原来是findAndM...
                        						来自:	 cominglately的博客
							安装pip install pymongopython3.4环境配置好,我是Windows系统,cmd命令安装就可以了连接数据库,简单增加,查询数据import pymongo
from pymong...
                        						来自:	 极客神殿
查询course表中,存在lectures_count字段的记录信息 
db.course.find( { “lectures.lectures_count”: { $exists...
                        						来自:	 IT届的小学生
							MongoDB在启用复制集(Replica Set)功能后,原先一个简单的索引添加,在之上会变得相对复杂,尤其是在数据量巨大的时候,需要考虑尽可能将性能影响降低到最小。基于此我们需要采取逐个节点创建索...
                        						来自:	 乐沙弥的世界
spring-data-mongo 实现了基于 MongoDB 的 ORM-Mapping 能力,
通过一些简单的注解、Query封装以及工具类,就可以通过对象操作来实现集合、文档的增删改...
                        						来自:	 qq_42564846的博客
因为,这个数据库用的是文本存储。所有可以像搜索文档一样搜索字段值,要是你的这个字段唯一的话。在自己搞测试的时候,用这个是最快的了,首先是图中的红色框,找到表里面的所有数据,然后就可以ctr...
                        						来自:	 请叫我大师兄
							Background Construction
For potentially long running index building operations, consider the back...
                        						来自:	 abcde
							更多代码请见:https://github.com/xubo245/SparkLearning  版本:Spark-2.0.01解释 
从【2】中下载release版,idea打开mvn packag...
                        						来自:	 Keep Learning
							一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一...
                        						来自:	 小平子的专栏
							本matplotlib安装过程在一定程度上参考了
  http://blog.csdn.net/qrlhl/article/details/48978107
因为学习机器学习的需要,又准备参考《机器学...
                        						来自:	 SCUT_Arucee的博客
							问题场景描述整个项目通过Maven构建,大致结构如下:
核心Spring框架一个module spring-boot-base
service和dao一个module server-core
提供系统...
                        						来自:	 开发随笔
							1、问题症状描述
      最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这...
                        						来自:	 Mr_Alex
							在 JSON 中我们已经介绍过其基本格式,与XML相同,JSON只是一个文字格式,只要客户端与伺服端可以剖析它,就可以利用它作为传送数据的格式,但它是JavaScript的核心特性之一,所以在Java...
                        						来自:	 Giraffe_zj的专栏