文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MongoDB索引(7)

2021-11-24 16:10

关注

MongoDB索引(7)

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。

增加检索的效率. mongodb提供了索引的支持.(越来越倾向于关系型数据库)

通常建立索引的, 基本要求, 就是文档的结构要尽可能一致.

普通单列索引

语法:

db.集合名.ensureIndex({键名:1}) # 1是升序 -1是降序

测试代码:

for(var i = 0; i < 200000; i++) {
    db.golang.insert({name:"bashlog"+i, age:i})
}

第一:先检验一下查询性能

var start = new Date()
db.golang.find({name:"bashlog187654"})
var end = new Date()
end - start

第二:为name创建索引

db.golang.ensureIndex({name:1})

第三:再执行第一部分的查询代码可以看出有数量级的性能提升

多列索引(复合索引)

语法:

db.集合名.ensureIndex({field1:1/-1, field2:1/-1})

对name和age建立复合索引

可以使用getIndexes()查看索引的创建情况

该索引被创建后,基于 username 和 age 的查询将会用到该索引,或者是基于 username 的查询也会用到该索引,但是只是基于 age 的查询将不会用到该复合索引。因此可以说, 如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。

子文档索引

语法:

db.集合名.ensureIndex({field.subfield:1/-1})

示例:

有如下结构的文档

{name:"诺基亚手机1", price:12.34, desc:{weight:100, area:"lundon"}}
{name:"诺基亚手机2", price:43.21, desc:{weight:200, area:"newYork"}}

要查询weight等于100的文档

db.goods.find({"desc.weight":100})

根据当前示例,我们建立子文档

db.集合名.ensureIndex({"desc.weight":1})

唯一索引

当给某个列添加了唯一索引后,那么这一列的数据就必须是唯一的,如果添加重复数据就回到值报错

语法:

db.集合名.ensureIndex({name:-1},{unique:true})

查看索引

常用命令:

(1)查看当前索引状态:

db.集合名.getIndexes()

(2)详情查看本次查询使用哪个索引和查询数据的状态信息。

explain("executionStats")

有索引时,查询时间

删除索引时查询时间

删除索引

删除单个索引

语法:

db.集合名.dropIndex({field:1/-1})

删除所有索引

语法:

db.集合名.dropIndexes()

注意:在删除所有的索引是,逐渐索引会保留。

重建索引

一个表经过多次修改后,导致表的文件产生空洞,所以文件也是如此。可以通过索引的重建,减少索引文件锁片,并提高索引的效率。

类似MySQL的optimize table 表名

语法:

db.集合名.reIndex()

索引使用注意事项

(1)创建索引的时候,注意1是正序创建索引 -1是倒序创建索引

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

(3)复合索引要注意索引的先后顺序。

(4)每个键全建立索引不一定就能提高性能,索引不是万能的。

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯