iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB的索引
  • 833
分享到

MongoDB的索引

2024-04-02 19:04:59 833人浏览 独家记忆
摘要

1、简介它就像是一本书的目录,如果没有它,我们就需要对整个书籍进行查找来获取需要的结果,即所说的全盘扫描;而有了目录(索引)之后就可以通过它帮我们定位到目标所在的位置,快速的获取我们想要的结果。2、演示第一

1、简介

它就像是一本书的目录,如果没有它,我们就需要对整个书籍进行查找来获取需要的结果,即所说的全盘扫描;

而有了目录(索引)之后就可以通过它帮我们定位到目标所在的位置,快速的获取我们想要的结果。

2、演示

第一步,向用户集合users中插入100W条数据

MongoDB的索引

 1 var insertUsers = function() { 2     var start = new Date().getTime(); 3     for (var i = 1; i <= 1000000; i++) { 4         db.users.insert({ 5             "userid": i, 6             "username": "wjg" + i, 7             "age": Math.floor(Math.random() * 100), //年龄为0~99的随机整数 8             "createdate": new Date() 9         })10     }11     var end = new Date().getTime();12     print("插入100W条数据共耗时" + (end - start) / 1000 + "秒");13 }

MongoDB的索引

LZ的渣渣I3和4G内存总共耗时了484.623秒,约8分多钟。任务管理器里边可以很清楚的看到当时CPU、内存和磁盘使用率都普遍的增高。MongoDB的索引

第二步:查询用户名为“wjg465413”的文档对象

MongoDB的索引 View Code

说明:这里的explain方法相当于查询计划,它会返回给你查询过程的详细信息。它的参数有三种模式:“queryPlanner”(查询计划[默认])、“executionStats”(执行状态)和“allPlansExecution”(所有执行计划),这里我们只关注它返回给我们的以下几个信息。

1 "executionTimeMillis" : 865  //执行的毫秒数 注:如果你是第一次执行,可能会花费更长的时间2 3 "totalDocsExamined" : 1000000  //共检查的文档数

第三步:在用户名“username”字段上加上索引

1 db.users.createIndex({ "username" : 1 })

 重新执行上次的查询操作

MongoDB的索引 View Code

可以看到两次的查询计划有很大的差别,我们还是着重看下那两个属性值。

1 "executionTimeMillis" : 53  //执行的毫秒数2 3 "totalDocsExamined" : 1  //共检查的文档数

加过索引之后查询这个文档所耗费的时间仅仅为53毫秒,并且扫描一次直接定位,性能提升了16倍。可见合理使用索引的重要性!

注:“_id”字段是MonGo为我们默认添加的索引,而且是唯一索引,保证了数据的唯一性,不可以移除。另外,使用limit(1)限制查询结果的数量也可以提高查询速度

3、索引的类型

a)、单一索引:可以在数据集上任意一个字段上建立索引,包括普通的属性键、内嵌文档以及内嵌文档中的属性键。

db.users.createIndex({ "username" : 1 })    //普通属性键的索引//假设class是一个内嵌的文档db.users.createIndex({ "class" : 1 })    //内嵌文档的索引 db.users.createIndex({ "class.classname" : 1 })    //内嵌文档中的属性键索引

索引方向:1表示升序,-1表示降序

b)、复合索引:以多个属性键为基础而建立得索引

1 db.users.createIndex({ "username" : 1, "age" : -1, "userid" : 1 })    //在“username”、“age”和“userid”上建立复合索引

索引前缀:通过建立上边的复合索引之后,Mongo就相当于同时拥有了三个索引一样,分别是{"username" : 1},{"username" : 1, "age" : -1}和{"username" : 1, "age" : -1, "userid" : 1},但是像{"age" : -1},{"userid" : 1}或者{"age" : -1, "userid" : 1}这三个索引并不会起作用。所以它会使用包含了前缀(首个)的索引的作为复合索引

c)、多键索引:为数组中的多个值建立索引以实现高效查询。

注:Ⅰ、不允许在多个数组上建立复合索引

  Ⅱ、不能指定片键作为多键索引

  Ⅲ、哈希索引不能是多键

  Ⅳ、多键索引不支持覆盖查询

d)、地理空间索引和查询:Mongo提供了两种曲面类型的索引:2dsphere索引和2d索引。查询类型包括:包含(inclusion),交叉(intersection)和接近(proximity)

e)、文本索引:用来支持查询包含了字符串或者字符串数组的文档

1 db.users.createIndex({"username" : "text"})

注:文本索引不支持排序并且一个复合文本索引不能再包含其他任何索引了

f)、哈希索引:它可以在使用了哈希片键进行分片的数据集上进行索引,支持相等查询,但是不支持范围查询

1 db.users.createIndex({"username" : "hashed"})

4、索引特性

a)、TTL(Time-To-Live)索引:是一种具有生命周期的索引,它允许为每一个文档设置一个超时时间

1 db.users.createIndex({ "createdate" : 1 },{ "expireAfterSecs" : 60*60*24 })

说明:在“createdate”字段上建立一个TTL索引,当这个自段存在并且是日期类型,当服务器时间比“createdate”字段的时间晚60*60*24秒,即24小时时,文档就会被删除

b)、唯一索引:确保集合的每一个文档的指定键都有唯一值

1 db.users.createIndex({"username" : 1}, {"unique" : true})

c)、稀疏索引:Mongo里边的null会被看做值,如果有一个可能存在也可能不存在的字段,我们可以使用稀疏索引

1 db.users.createIndex({"age" : 1},{"sparse" : true})

4、索引操作

a)、查看所有索引

1 db.users.getIndexes()

b)、移除索引

1 db.users.dropIndex({"createdate1" : 1 })

c)、移除所有索引

1 db.users.dropIndexes()

d)、重建索引

1 db.users.reIndex()

说明:该操作会先删除所有索引,包括“_id”,然后重新创建所有索引

服务、思考、安全


您可能感兴趣的文档:

--结束END--

本文标题: MongoDB的索引

本文链接: https://www.lsjlt.com/news/41800.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB之索引(全文索引)
    在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是在某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查A字段或者是B字段,而在MongoDB里面实现了非常简单的全文检索。 ...
    99+
    2024-04-02
  • MongoDB中的索引是怎样的
    本篇文章给大家分享的是有关MongoDB中的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索...
    99+
    2023-06-19
  • MongoDB索引机制详解
    目录⭐ MongoDB 的索引机制⭐ 索引的类型 创建索引 - 单字段索引 创建索引 - 多字段索引 创建索引 - 唯一性索引 创建索引 - 文本索引 创建索引 - 地理空间索引⭐ 查看所有索引⭐ 删除索引⭐ Mongo...
    99+
    2023-04-23
    MongoDB的索引机制 MongoDB的索引 Python MongoDB
  • MongoDB中索引怎么用
    小编给大家分享一下MongoDB中索引怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在任何数...
    99+
    2024-04-02
  • mongodb如何添加索引
    mongodb添加索引的方法:在mongodb可以使用createIndex()方法来创建添加索引,语法格式为:“db.collection.createIndex(keys, options)”,这里keys指的是你创建添加索引的值,并且...
    99+
    2024-04-02
  • MongoDB TTL索引的实例详解
    MongoDB TTL索引的实例详解 TTL索引是一种特殊类型的单字段索引,主要用于当满足某个特定时间之后自动删除相应的文档。也就是说集合中的文档有一定的有效期,超过有效期的文档就会失效,会被移除。也即是数...
    99+
    2024-04-02
  • MongoDB中索引的示例分析
    这篇文章主要介绍MongoDB中索引的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、索引究竟是什么东西?大部分开发者接触索引,大概知道索引类似书的目录,你要找到想要的内容...
    99+
    2024-04-02
  • MongoDB中二级索引和主索引的区别是什么
    MongoDB中的主索引是指集合中的_id字段,默认情况下_id字段会被自动创建并作为主索引。主索引是集合中的唯一索引,它保证了集合...
    99+
    2024-04-19
    MongoDB
  • mongodb如何查看表索引
    在MongoDB中,可以使用以下方法来查看表的索引:1. 使用`db.collection.getIndexes()`方法:该方法可...
    99+
    2023-09-11
    mongodb
  • mongodb怎么建立hash索引
    在MongoDB中,可以通过使用`createIndex()`方法来建立一个哈希索引。首先,连接到MongoDB数据库。然后,选择要...
    99+
    2023-09-06
    mongodb
  • MongoDB索引管理的示例分析
    这篇文章给大家分享的是有关MongoDB索引管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。索引是提高查询查询效率最有效的手段。索引是一种特殊的数据结构,索引以易于遍...
    99+
    2024-04-02
  • MongoDB复合索引引发的灾难是怎样的
    这期内容当中小编将会给大家带来有关MongoDB复合索引引发的灾难是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前情提要11月末我司商品服务的MongoDB主库曾...
    99+
    2024-04-02
  • mongodb怎么查看命中的索引
    在MongoDB中,可以使用explain()方法来查看命中的索引。explain()方法会返回查询的执行计划,包括是否命中索引以及...
    99+
    2023-08-30
    mongodb
  • 怎么查看mongodb集合的索引
    要查看MongoDB集合的索引,您可以使用以下两种方法:1. 使用MongoDB的索引管理命令:- 打开MongoDB shell,...
    99+
    2023-08-31
    mongodb
  • mongodb支持的索引有哪几种
    MongoDB支持以下几种索引: 唯一索引(Unique Index):确保索引键中的值是唯一的,可以用来保证集合中的某个字段的...
    99+
    2023-10-22
    mongodb
  • mongodb中索引分类是怎样的以及如何创建索引
    mongodb中索引分类是怎样的以及如何创建索引,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。学习索引分类和创建索引:   &nbs...
    99+
    2024-04-02
  • mongodb删除索引的方法是什么
    在MongoDB中,可以使用db.collection.dropIndex()方法来删除索引。通过指定索引的名称或键名,即可删除该索...
    99+
    2024-03-08
    mongodb
  • 怎么在MongoDB中创建索引
    这期内容当中小编将会给大家带来有关怎么在MongoDB中创建索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MongoDB 创建索引的语法1.为普通字段添加索引,并且为...
    99+
    2024-04-02
  • MongoDB中连接池、索引、事务
    目录连接池 = 数据库连接的缓存MongoDB查询数据五步走MongoDB连接池的参数配置下面简单说一下MongoDB的索引索引基数是指集合中某个字段有多少个不同的值MongoDB内...
    99+
    2023-01-11
    MongoDB 连接池 MongoDB 索引 MongoDB事务
  • MongoDB索引类型怎么实现
    本文小编为大家详细介绍“MongoDB索引类型怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“MongoDB索引类型怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。MongoDB 4.2官方支持索引...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作