美文网首页
MongoDB开发之 索引简介

MongoDB开发之 索引简介

作者: 五月笙 | 来源:发表于2020-12-25 15:18 被阅读0次

引子

索引是提高性能的关键

简介

在目录缺失的情况下,如何在很厚的一本书中快速找到指定的章节?

数据库的索引和书籍的目录类似

示例

创建一个1000000的文档集合:

> for (i=0;i<1000000;i++) {
...     db.machine.insert({
...         "machineName":"测试机械00" + i,
...         "fenceName":"测试机械围栏00" + i,
...         "remark":"测试机械备注00" + i,
...         "created_at":new Date()
...     });
... }

WriteResult({ "nInserted" : 1 })

查询指定的某一条数据,并查看花费的时间:

> db.machine.find({"machineName":"测试机械00999"}).explain("executionStats").executionStats.executionTimeMillis
1228

查看同样的一条数据,查看其文档扫描数:

> db.machine.find({"machineName":"测试机械00999"}).explain("executionStats").executionStats.totalDocsExamined
1000099

根据上面的查询返回参数可得出结论:

1、查询执行时间为1228毫秒
2、查询扫描文档数为1000099个(全部)

这时候优化一下查询,添加一个limit()参数后,时间花费:

> db.machine.find({"machineName":"测试机械00999"}).limit(1).explain("executionStats").executionStats.executionTimeMillis
1

文档扫描数为:

> db.machine.find({"machineName":"测试机械00999"}).limit(1).explain("executionStats").executionStats.totalDocsExamined
1099

根据返回参数可以得到结论:

1、查询执行时间为1毫秒
2、查询扫描文档数为1099个

因为只查询一条数据,在遍历查询时查到一条数据就立即返回,所以耗时很少。

如果想查询的数据很靠后呢,依旧会扫描很多文档,花费更多的时间才会查询到。

创建索引

> db.machine.ensureIndex({"machineName":1})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

然后重新执行一下上面的查询以及时间花费为:

> db.machine.find({"machineName":"测试机械00999"}).explain("executionStats").executionStats.executionTimeMillis
1

文档扫描数为:

> db.machine.find({"machineName":"测试机械00999"}).explain("executionStats").executionStats.totalDocsExamined
1

根据返回参数可以得到结论:

1、查询执行时间为1毫秒
2、查询扫描文档数为1个

可以看出,有了索引查询几乎瞬间完成。

问题

1、每次写操作(插入、更新、删除)要花费更多的时间
2、添加索引会占用更多物理空间

参考

MongoDB权威指南
MongoDB实战

相关文章

  • MongoDB开发之 索引简介

    引子 简介 在目录缺失的情况下,如何在很厚的一本书中快速找到指定的章节? 示例 创建一个1000000的文档集合:...

  • 128|MongDB 之索引

    https://github.com/qianjiahao/MongoDB/wiki/MongoDB之索引

  • MongoDB基础之索引详解

    1 索引 1.1 简介 1.1.1 索引定义 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取...

  • MongoDB开发之 TTL索引

    定义 运行逻辑 MongoDB会开启一个后台线程读取该TTL索引的值来判断文档是否过期。 后台线程每60秒触发一次...

  • 详解 MongoDB 索引优化

    一、索引简介 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB 在读取数据时必须扫描集合中的每个文件...

  • 24.Mongodb的索引操作

    Mongodb的索引操作 学习目标 掌握 mongodb索引的创建,删除操作 掌握 mongodb查看索引的方法 ...

  • MongoDB索引二(九)

    MongoDB索引二(九) 接上篇MongoDB索引一

  • 详解MongoDB索引优化

    一、索引简介 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并...

  • MongoDB学习报告(二)

    概述 MongoDB索引管理MongoDB查询优化 MongoDB索引管理 单键索引中的每一项都应该对应被索引文档...

  • MongoDB 学习笔记

    MongoDB 简介 MongoDB 是为快速开发互联网 WEB 应用而设计的数据库系统。MongoDB 的设计目...

网友评论

      本文标题:MongoDB开发之 索引简介

      本文链接:https://www.haomeiwen.com/subject/xddbnktx.html