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()
该操作会删除这个集合上所有的索引,然后进行重新构建。
相关文章
- 《痞子衡嵌入式半月刊》 第 69 期
- 痞子衡嵌入式:对比恩智浦全系列MCU(包含Kinetis/LPC/i.MXRT/MCX)的GPIO电平中断设计差异
- 痞子衡嵌入式:我被邀请做科锐国际旗下数科同道主办的技术沙龙嘉宾
- 痞子衡嵌入式:低功耗&高性能边缘人工智能应用的新答案 - MCXN947
- 《痞子衡嵌入式半月刊》 第 68 期
- 痞子衡嵌入式:我为2021 TencentOS Tiny AIoT应用创新大赛做了场直播培训
- 痞子衡嵌入式:我被邀请做贸泽电子&与非网联合推出的《对话工程师》节目嘉宾
- 痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)
- 痞子衡嵌入式:国内外串行NOR Flash厂商官网Cross Reference功能使用体验
- 痞子衡嵌入式:MCUXpresso IDE下高度灵活的FreeMarker链接文件模板机制
- 《痞子衡嵌入式半月刊》 第 67 期
- 《痞子衡嵌入式半月刊》 第 66 期
- 《痞子衡嵌入式半月刊》 第 65 期
- 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad
- 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案
- 《痞子衡嵌入式半月刊》 第 64 期
- 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用
- 痞子衡嵌入式:一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事(SR寄存器BP[x:0]位)
- 痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异
- 《痞子衡嵌入式半月刊》 第 63 期