我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mongodb数据库中怎么使用索引

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mongodb数据库中怎么使用索引

这篇文章将为大家详细讲解有关mongodb数据库中怎么使用索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

        在关系型数据库中索引可以加快对数据输出,非关系型数据库也是如此,可以减小磁盘IO访问,对大数据量有显著的效果。目前mongodb支持B-Tree,unique,sparse,hash索引

在mongodb集群中生成数据

[root@node2 mongodb-4.0.8]# ./bin/mongo --host 172.16.8.24 --port 27017

MongoDB shell version v4.0.8

connecting to: mongodb://172.16.8.24:27017/?gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("a1abbd3a-fe32-46ac-a959-4f8a62abd990") }

MongoDB server version: 4.0.8

Server has startup warnings:

wuhan:PRIMARY> for (var i=1;i<=1000;i++) { db.stu.insert({sn:i,name:"student"+i})}

WriteResult({ "nInserted" : 1 })

wuhan:PRIMARY> db.stu.find().count();

1000

wuhan:PRIMARY> db.stu.find();

{ "_id" : ObjectId("5ca3004015fc3dad4a419a75"), "sn" : 1, "name" : "student1" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a76"), "sn" : 2, "name" : "student2" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a77"), "sn" : 3, "name" : "student3" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a78"), "sn" : 4, "name" : "student4" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a79"), "sn" : 5, "name" : "student5" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7a"), "sn" : 6, "name" : "student6" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7b"), "sn" : 7, "name" : "student7" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7c"), "sn" : 8, "name" : "student8" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7d"), "sn" : 9, "name" : "student9" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7e"), "sn" : 10, "name" : "student10" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7f"), "sn" : 11, "name" : "student11" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a80"), "sn" : 12, "name" : "student12" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a81"), "sn" : 13, "name" : "student13" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a82"), "sn" : 14, "name" : "student14" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a83"), "sn" : 15, "name" : "student15" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a84"), "sn" : 16, "name" : "student16" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a85"), "sn" : 17, "name" : "student17" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a86"), "sn" : 18, "name" : "student18" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a87"), "sn" : 19, "name" : "student19" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a88"), "sn" : 20, "name" : "student20" }

Type "it" for more

wuhan:PRIMARY> 

一.B-Tree索引的使用

1.单列索引使用

wuhan:PRIMARY> db.stu.ensureIndex({sn:1})       --在sn字段上创建索引

wuhan:PRIMARY> db.stu.find({sn:50}).explain();   --查看执行计划是否走索引

wuhan:PRIMARY> db.stu.getIndexKeys()              --查看表中有多少键

[ { "_id" : 1 }, { "sn" : 1 } ]

wuhan:PRIMARY> db.stu.getIndexes()           --查看一个表所有索引

[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "tong.stu"
},
{
"v" : 2,
"key" : {
"sn" : 1
},
"name" : "sn_1",
"ns" : "tong.stu"
}
]

wuhan:PRIMARY> db.stu.dropIndex({sn:1});          --删除sn字段的索引

wuhan:PRIMARY> db.stu.dropIndexes();               --删除所有索引

2.多列索引使用

wuhan:PRIMARY> db.stu.ensureIndex({name:1},{name:"IX_name"})    --创建多列索引

{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1,
"operationTime" : Timestamp(1554188377, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1554188377, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

wuhan:PRIMARY> db.stu.getIndexes()     --查看索引信息

[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "tong.stu"
},
{
"v" : 2,
"key" : {
"name" : 1
},
"name" : "IX_name",
"ns" : "tong.stu"
}
]

wuhan:PRIMARY> db.stu.dropIndex({name:"IX_name"})     --删除其中一个索引

{
"operationTime" : Timestamp(1554188499, 1),
"ok" : 0,
"errmsg" : "can't find index with key: { name: \"IX_name\" }",
"code" : 27,
"codeName" : "IndexNotFound",
"$clusterTime" : {
"clusterTime" : Timestamp(1554188499, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

3.子文档索引使用

wuhan:PRIMARY> db.shop.insert({name:"Nokia",spc:{weight:120,area:"taiwan"}})    --写入数据

WriteResult({ "nInserted" : 1 })

wuhan:PRIMARY> db.shop.insert({name:"sanxing",spc:{weight:100,area:"hanguo"}})  --写入数据

WriteResult({ "nInserted" : 1 })

wuhan:PRIMARY> db.shop.find()       --查询数据

{ "_id" : ObjectId("5ca337ff15fc3dad4a419e5d"), "name" : "Nokia", "spc" : { "weight" : 120, "area" : "taiwan" } }

{ "_id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "name" : "sanxing", "spc" : { "weight" : 100, "area" : "hanguo" } }

wuhan:PRIMARY> db.shop.find({"spc.area":"hanguo"});     --查询子文档的数据

{ "_id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "name" : "sanxing", "spc" : { "weight" : 100, "area" : "hanguo" } }

wuhan:PRIMARY> db.shop.ensureIndex({"spc.area":1});     --子文档创建索引

{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1,
"operationTime" : Timestamp(1554200928, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1554200928, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

wuhan:PRIMARY> db.shop.getIndexes();

[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "tong.shop"
},
{
"v" : 2,
"key" : {
"spc.area" : 1
},
"name" : "spc.area_1",
"ns" : "tong.shop"
}
]

wuhan:PRIMARY>

二.唯一索引(唯一索引中字段值必须是唯一的)

wuhan:PRIMARY> db.stu.ensureIndex({name:1},{unique:true})

{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1,
"operationTime" : Timestamp(1554188549, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1554188549, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

wuhan:PRIMARY> db.stu.getIndexes()

[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "tong.stu"
},
{
"v" : 2,
"unique" : true,
"key" : {
"name" : 1
},
"name" : "name_1",
"ns" : "tong.stu"
}
]

wuhan:PRIMARY> db.stu.totalIndexSize()     --查看索引大小

40960

wuhan:PRIMARY> db.stu.totalSize()

69632

wuhan:PRIMARY> 

三.稀疏索引(字段有值就创建索引,没有值不创建索引)

wuhan:PRIMARY> db.shop.find()

{ "_id" : ObjectId("5ca337ff15fc3dad4a419e5d"), "name" : "Nokia", "spc" : { "weight" : 120, "area" : "taiwan" } }

{ "_id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "name" : "sanxing", "spc" : { "weight" : 100, "area" : "hanguo" } }

wuhan:PRIMARY> db.shop.insert({})          --插入一个空值

WriteResult({ "nInserted" : 1 })

wuhan:PRIMARY> db.shop.find();         

{ "_id" : ObjectId("5ca337ff15fc3dad4a419e5d"), "name" : "Nokia", "spc" : { "weight" : 120, "area" : "taiwan" } }

{ "_id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "name" : "sanxing", "spc" : { "weight" : 100, "area" : "hanguo" } }

{ "_id" : ObjectId("5ca3419c15fc3dad4a419e5f") }

wuhan:PRIMARY> db.shop.ensureIndex({name:1},{sparse:true});     --创建稀疏索引

{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1,
"operationTime" : Timestamp(1554203093, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1554203093, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

wuhan:PRIMARY> db.shop.find({name:"null"});            --null值不显示

wuhan:PRIMARY> 

四.哈稀索引

wuhan:PRIMARY> db.t.ensureIndex({a:"hashed"});

{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1,
"operationTime" : Timestamp(1554203661, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1554203661, 2),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

wuhan:PRIMARY> db.t.find({a:"25"}).explain();

{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "tong.t",
"indexFilterSet" : false,
"parsedQuery" : {
"a" : {
"$eq" : "25"
}
},
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"a" : {
"$eq" : "25"
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"a" : "hashed"
},
"indexName" : "a_hashed",        --显示为hash索引
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"a" : [
"[7200060250846542811, 7200060250846542811]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "node2",
"port" : 27017,
"version" : "4.0.8",
"gitVersion" : "9b00696ed75f65e1ebc8d635593bed79b290cfbb"
},
"ok" : 1,
"operationTime" : Timestamp(1554203690, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1554203690, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

wuhan:PRIMARY> 

五.索引重建(当索引效率不高时可以考虑重建索引)

wuhan:PRIMARY> db.t.reIndex();            --重建t表的索引

关于mongodb数据库中怎么使用索引就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

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

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

mongodb数据库中怎么使用索引

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

下载Word文档

猜你喜欢

MongoDB数据库索引怎么使用

这篇“MongoDB数据库索引怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MongoDB数据库索引怎么使用”文章吧
2023-07-02

mongodb数据库怎么创建索引

小编给大家分享一下mongodb数据库怎么创建索引,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、索引命令创建索引db.stu.ensureIndex({“name”:1})创建唯一索引db.stu.ensureInde
2023-06-14

MongoDB数据库索引用法详解

一.索引详讲索引是什么,索引就好比一本书的目录,当我们想找某一章节的时候,通过书籍的目录可以很快的找到,所以适当的加入索引可以提高我们查询的数据的速度。准备工作,向MongoDB中插入20000条记录,没条记录都有number和name
2022-07-08

数据库怎么使用索引查询数据

使用索引来查询数据可以提高查询的效率。下面是使用索引查询数据的步骤:1. 创建索引:在数据库表中创建索引,可以是单列索引或者组合索引。索引可以加速查询操作,但是会增加插入、更新和删除操作的开销。2. 确定查询条件:确定要查询的数据的条件和要
2023-08-18

mysql数据库索引怎么用

mysql数据库索引优化可有效提升查询性能。索引通过按特定列排序数据,快速定位满足查询条件的数据块,避免全表扫描。mysql支持多种索引类型,包括b树索引、哈希索引、全文本索引和空间索引。创建索引需使用create index语句,并选择经
mysql数据库索引怎么用
2024-08-05

数据库索引如何使用

数据库索引是一种优化数据库查询性能的技术。通过使用索引,可以快速定位到数据库中存储的数据,减少查询的时间和资源消耗。使用数据库索引的步骤如下:1. 设计索引:在表中选择需要创建索引的列。通常选择经常用于查询的列,如主键、外键、经常用于WHE
2023-08-17

NoSQL数据库中怎么构建索引

在NoSQL数据库中建立索引可以提高查询性能和数据访问速度。通常情况下,NoSQL数据库会根据指定的字段或属性来建立索引。以下是一些在NoSQL数据库中构建索引的一般步骤:选择合适的字段:首先要选择在哪些字段上建立索引,通常选择那些经常被查
NoSQL数据库中怎么构建索引
2024-05-07

MySQL数据库索引的弊端及怎么使用

本篇内容介绍了“MySQL数据库索引的弊端及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合理利用索引在工作中,我们可能判断数据表中
2023-06-21

编程热搜

目录