博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB索引的基本用法
阅读量:5161 次
发布时间:2019-06-13

本文共 1204 字,大约阅读时间需要 4 分钟。

索引通过ensureIndex方法建立:

> db.collection.ensureIndex({
'name': 1})

也可以建立复合索引:

> db.collection.ensureIndex({
'age': 1, 'name': 1})

一般而言,采用ensureIndex({排序键}, {查询键})的方式建立复合索引效率更高。比如,针对下列操作:

> db.collection.find({'age': {'$gte': 20, '$lte':29}}).sort({'name': 1})

如采用age、name的方式建立索引,则搜索的文档很少(只检索age在20-29之间的记录),但是排序要花费大量时间。如采用name、age的方式建立索引,则搜索的文档很多(按照name排查),但是不需要排序,因为在name上建立了第一索引,所以天然按顺序排列。因为搜索很多情况下只需要返回几条记录,所以用limit限值数量后,第二种方式会远快于第一种。

也可以反向建立索引(age:1, name:-1),一般与排序顺序相同。

{'x': {'$exists': false}}也可以建立索引,但是效率偏低,因为x不存在和x值为null的存储方式一样,所以不得不遍历整个文档。

在创建索引时,可以指定unique值为true,即创建唯一索引:

> db.collection.ensureIndex({
'key': 'value'}, {
'unique': true})

值为null或者不存在视为同一种情况,所以创建唯一索引后,集合中最多只能有一个文档不存在key键或者key的值为value。如果希望唯一索引只针对key存在的情况有效,则可以建立稀疏索引:

> db.collection.ensureIndex({
'key': 'value'}, {
'unique': true, 'sparse': true})

这样唯一索引就只针对key存在的情况有效。注意,稀疏索引不一定是唯一索引,在上面的操作中把unique去掉,则得到一个不唯一的稀疏索引。这样在查询key的值时,key不存在的记录就不会返回。

可以采用explain方法对查询过程进行诊断。

不是所有情况下都适合使用索引。当集合、文档较大,或者查询为选择性查询时可以考虑索引。相反的,如果集合和文档较小,或者需要进行全表扫描时,就不应该使用索引。

想要查询集合中的所有索引时,可以用getIndexes方法:

> db.collection.getIndexes()

删除索引用dropIndex方法,需要先通过getIndexes获取name字段的值来指定需要删除的索引。

转载于:https://www.cnblogs.com/00986014w/p/8406346.html

你可能感兴趣的文章
Windows 10系统出现:“出现系统还原使用的卷影复制服务无法运行...”的问题解决...
查看>>
Servlet3.0新特性
查看>>
Java的基本数据类型
查看>>
js 中的selection对象使用笔记+光标定位
查看>>
通过LINQ TO SQL类显示数据库表的数据
查看>>
MySQL8.0本地访问设置为远程访问权限
查看>>
web开发笔记
查看>>
curl常用操作
查看>>
什么情况下,英文单词中的k发音变g,t发音变d,p发音变b
查看>>
Android 图片旋转(使用Matrix.setRotate方法)
查看>>
CAP理论
查看>>
Linux----内核学习过程
查看>>
SSL 1761——城市问题[最短路]
查看>>
[树上差分][子树求和][树形dp] Jzoj P5911 Travel
查看>>
浏览器中使用 ES6 import
查看>>
Xcode 清理存储空间
查看>>
poj2947(高斯消元解同模方程组)
查看>>
Node-Webkit打包
查看>>
Kotlin——初级篇(八):关于字符串(String)常用操作汇总
查看>>
迷失在小镇上的日记(5)
查看>>