mongodb的索引操作
在mongodb中,当我们一个集合中的数据量非常大时,比如几百万条数据,如果不使用索引,对数据的查询就会进行全表扫描,这个时候查询的速度就会非常的慢,此时我们就需要为集合建立上索引,从而加快查询的速度。既然索引可以加快我们的查询速度,那么是否为集合的每个字段上都建立索引呢?这个显然是不正确的,虽然索引可以加快我们的查询速度,但是在插入、更新、删除数据时就会相应的变慢,因为此时需要维护索引,因此我们理性的在集合上创建索引。
建立索引的语法:
db.collections.createIndex({
key1 : 1, // 表示为key1创建一个正序索引
key2 : -1 // 表示为key2创建一个倒叙索引
} ,{
background :true, // true : 表示后台创建索引 false:表示同步创建索引,会阻塞mongodb其余的操作
unique
: true , // true: 表示创建唯一索引 false:表示非唯一。 对于散列索引,该选项无效。
name : 'index_1', // name 表示指定索引的名字,如果没有指定,mongodb会默认生成一个名字。
partialFilterExpression :null, // 表示根据某些条件建立索引,比如:为name=5的字段建立索引
sparse : true, // true: 表示建立稀疏索引,表示只有存在该字段时才在该字段上建立索引 false:不是稀疏索引
expireAfterSeconds : 10, //表示10秒后,该文档会被删除
weights : null // 表示权重,全文索引中指定字段的权重,默认情况下是1
default_language:'zhs', // 全文索引分词的语言,默认情况下是英文
......
});
默认的 _id 索引:
对应默认的_id索引,mongodb会默认为此字段加上一个唯一索引,且此索引无法删除。
建立一个单键索引:
db.persons.createIndex({"userId": 1}, {background:true,name:"index_01"});
上述表示在 userId上建立一个正序索引,在后台进行创建, 索引的名字是 index_01
创建一个复合索引:
db.persons.createIndex({"userId": 1,"age":-1}, {background:true,name:"index_02"})
注意:1、上述使用了 userId 和 age 创建了一个复合索引。
2、最多可以使用 31 个字段组合成复合索引
3、复合索引的创建时字段的顺序是有影响的,比如此时是userId然后是age,那么在进行数据查询时,使用userId查可以使用索引,使用userId和age查也可以使用索引,但是使用age和userId进行查是不会使用索引的。
4、总结上面的3就是,mongodb的复合索引,支持前缀查找,即查询的字段的顺序如果是创建字段的前缀时,则可以使用索引。比如:userId就是 userId和age的前缀,那么就可以使用索引。
全文索引:
地理位置索引:
查看集合上的索引:
db.persons.getIndexes()
删除集合上的索引:
// 删除索引名字是 index_01 的索引
db.persons.dropIndex("index_01");
// 删除所有的索引
db.persons.dropIndexes();
重新构建索引:
db.persons.reIndex()
该操作会删除这个集合上所有的索引,然后进行重新构建。
mongodb的索引操作的更多相关文章
- MongoDB:索引操作
首先插入十万个数据 ;i;i++){ var rand = parseInt(i*Math.random()); db.person_test.insert({"name":&qu ...
- Mongodb学习笔记三(Mongodb索引操作及性能测试)
第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- MongoDB数据库索引
前面的话 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查 ...
- MongoDB数据库索引构建情况分析
前面的话 本文将详细介绍MongoDB数据库索引构建情况分析 概述 创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能.这时,就需要评判当前索引的构建情况是否合理.有4种方法可以使 ...
- MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引
这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...
- MongoDB基本命令行操作
1. 连接MongoDB: Mongodb://username:password@hostname/dbname 2. 创建数据库: use dbname:如果数据库不存在则创建数据库,否则切换到指 ...
随机推荐
- JS020. Array map()函数查到需要的元素时跳出遍历循环,不再执行到数组边界
Array.prototype.map() map( ) 方法创建一个 新数组 *,其结果是该数组中的每个元素是调用一次提供的 函数后的返回值 *.[ MDN / RUNOOB ] * map 添加 ...
- 事务保存点savepoint
一.
- ssh跳转设置
SSH工具的非常规使用 原创 景朝阳 FreeSWITCH中文社区 今天 说明:本文所有的命令是基于OpenSSH客户端7.4p1版本.如果出现命令不正确,请检测是否为此OpenSSH版本. 设置 ...
- [AtcoderABC200E]Patisserie
[AtcoderABC200E]Patisserie 题面翻译 对于一个三元组\((i,j,k)\) 我们对它按如下要求进行升序排序: 第一关键词 \(i + j + k\) 即三者总和 第二关键词 ...
- javascript 关闭当前页面
1. 不带任何提示关闭窗口的js代码 <a href="javascript:window.opener=null;window.open('','_self');window.clo ...
- php备份mysql 数据库
1.新建php文件 <?phpheader('Content-Type:text/html;charset=utf8'); ini_set("max_execution_time&qu ...
- YbtOJ#752-最优分组【笛卡尔树,线段树】
正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 \(n\)个人,每个人有\(c_i\)和\(d_i\)分别表示这个人所在的队伍的最少/最多人数. 然后 ...
- 深入浅出WPF-07.Property(属性)
依赖属性 1)字段与属性:字段被封装在实例中,要么能够被外界访问(非Private),要么不能够被外界访问(Private).但是我们直接把数据暴露给外界的做法不安全,容易把错误的数据写入字段.于是我 ...
- CRM是什么,你有认真了解过CRM吗?
这是CRM的一个简单定义 客户关系管理 (CRM)是一种用于管理公司与客户和潜在客户的所有关系和互动的技术.目标很简单:改善业务关系.CRM 系统可帮助公司与客户保持联系.简化流程并提高盈利能力. 当 ...
- iOS 15 无法弹出授权弹框之解决方案---Your app uses the AppTrackingTransparency framework, but we are unable to locate the App Tracking Transparency permission request when reviewed on iOS 15.0
2021年9月30日下午:我正愉快的期盼着即将到来的国庆假期,时不时刷新下appstoreconnect的网址,28号就提上去的包,今天还在审核中....由于这个版本刚升级的xcode系统和新出的iO ...