mongodb数据库索引的使用方法

分类:编程技术 时间:2024-02-20 15:25 浏览:0 评论:0
0
本文将详细讲解如何在mongodb数据库中使用索引。文章内容质量较高,小编分享给大家,作为参考。希望您看完本文后对相关知识有一定的了解。

关系型数据库中的索引可以加快数据输出的速度,非关系型数据库也是如此。它们可以减少磁盘IO访问,对于大量数据有显着的效果。目前mongodb支持B-Tree、唯一、稀疏、哈希索引

在mongodb集群中生成数据

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

MongoDB shell 版本 v4.0.8

连接到:mongodb://172.16.8.24:27017/?gssapiServiceName=mongodb

隐式会话:session { "id" : UUID("a1abbd3a-fe32-46ac-a959-4f8a62abd990") }

MongoDB 服务器版本:4.0.8

< p>服务器有启动警告:

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

WriteResult({ "nInserted" : 1 })

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

1000

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

{ "_id" : ObjectId( "5ca3004015fc3dad4a419a75"), "sn" : 1, "姓名" : "学生1" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a76"), "sn" : 2, "姓名" : "学生2 " }

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

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

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

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

{ "_id" : ObjectId("5ca3004015fc3dad4a419a7b "), "sn" : 7, "姓名" : "学生7" }

{ " _id" : ObjectId("5ca3004015fc3dad4a419a7c"), "sn" : 8, "姓名" : "学生8" }

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

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

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

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

{ "_id" : ObjectId("5ca3004015fc3dad4a419a81"), “sn”:13,“姓名”:“学生13”}

{“_id”:ObjectId(“5ca3004015fc3dad4a419a82”),“sn”:14,“姓名”:“学生14”}

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

{ "_id" : ObjectId("5ca3004015fc3dad4a419a84"), " sn" : 16,"姓名" : "学生16" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a85"), "sn" : 17, "姓名" : "学生17" }

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

{ "_id" : ObjectId("5ca3004015fc3dad4a419a87"), "sn " : 19, " 姓名" : "学生19" }

{ "_id" : ObjectId("5ca3004015fc3dad4a419a88"), "sn" : 20, "姓名" : "学生20" }

< p>输入“it”了解更多

wuhan:PRIMARY>

1. B-Tree索引的使用

1.单列索引的使用

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

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

wuhan:PRIMARY> db.stu.getIndexKeys() --检查表中有多少个key

[ { "_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"}) --创建多列索引

< pre>{"createdCollectionAutomatically": false,"numIndexesBefore": 1,"numIndexesAfter": 2,"ok": 1,"操作时间": 时间戳(1554188377, 2),"$clusterTime" : {"clusterTime" : Timestamp(1554188377, 2),"signature" : {"hash" : BinData (0,"AAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}}< p>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" : "找不到带有键的索引: { name: \"IX_name\" }","code" : 27,"codeName" : "IndexNotFound","$clusterTime " : {"clusterTime" : Timestamp(1554188499, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAA="),"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,阿尔ea:"hanguo"}}) --写入数据

WriteResult({ "nInserted" : 1 })

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

{ "_id" : ObjectId("5ca337ff15fc3dad4a419e5d"), "name" : "诺基亚", "spc" : { "weight" : 120, "area" : "台湾" } }

{ "_id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "名称" : "三星", "spc" : { "重量" : 100, "面积" : "杭州" } }

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

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

武汉: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,"AAAAAAAAAAAAAAAAAAAAA=") ,"keyId" : NumberLong(0)}}}
<武汉:主要> 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"}]

武汉:小学>

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

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

 {“createdCollectionAutomatically”:假,“numIndexesBefore”:1,“numIndexesAfter”:2,“ok”:1,“操作时间”:时间戳(1554188549, 2),“$clusterTime”:{“clusterTime”:时间戳(1554188549, 2),"signature" : {" hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAA="),"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"}]

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

40960

wuhan:PRIMARY> db.stu.totalSize()

69632

p>

武汉:小学>

3.疏索引(如果字段有值则创建索引,无值则不创建索引))

wuhan:PRIMARY> db.shop.find()

{ "_id" : ObjectId("5ca337ff15fc3dad4a419e5d"), "名称" : "诺基亚", "spc" : { "重量" : 120, "地区" : "台湾" } }

{ " _id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "名称" : "三星", "spc" : { "重量" : 100, "面积" : "杭州" } }

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

WriteResult({ " nInserted" : 1 })

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

{ "_id" : ObjectId("5ca337ff15fc3dad4a419e5d"), "名称" : "诺基亚", "spc" : { "重量" : 120, "地区" : "台湾" } }

{ "_id" : ObjectId("5ca3382c15fc3dad4a419e5e"), "名称" : "三星", "spc" : { "重量" : 100, "面积" : "韩国" } }

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

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

{"createdCollectionAutomatically" : false, "numIndexesBefore" : 2,"numIndexesAfter" : 3,“确定”:1,“操作时间”:时间戳(1554203093,2),“$ clusterTime”:{“集群时间”:时间戳(1554203093,2),“签名”:{“散列”:BinData(0,“AAAAAAAAAAAAAAAAAAAAA= "),"keyId" : NumberLong(0)}}}

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

wuhan:PRIMARY>

4.哈希索引

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

{"createdCollectionAutomatically" : false,"numIndexesBefore" : 1,"numIndexesAfter " : 2,"ok" : 1,"操作时间" : 时间戳(1554203661, 2),"$clusterTime" : {"clusterTime" : 时间戳(1554203661, 2),"签名" : {"哈希" : BinData(0 ,"AAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0)}}}

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

{" queryPlanner" : {"plannerVersion" : 1,"namespace" : "tong.t","indexFilterSet" : false,"parsedQuery" : {"a" : {"$eq" : "25 "}},"winingPlan" : {"stage" : "FETCH","filter" : {"a" : {"$eq" : "25"}},"inputStage" : {"stage" : "IXSCAN" ,“keyPattern”:{“a”:"hashed"},"indexName" : "a_hashed", --显示为哈希索引 "isMultiKey" : false,"isUnique" : false,"isSparse" : false,"isPartial" : false,"indexVersion" : 2,"方向”:“前进”,“indexBounds”:{“a”:[“[7200060250846542811,7200060250846542811]”]}}},“rejectedPlans”:[]},“serverInfo”:{“主机”:“节点2”, “端口”:27017,“版本”:“4.0.8”,“gitVersion”:“9b00696ed7​​5f65e1ebc8d635593bed79b290cfbb”},“确定”:1,“操作时间”:时间戳(1554203690,1),“$ clusterTime”:{“ clusterTime” " : Timestamp(1554203690, 1), "signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}}

wuhan:PRIMARY>

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

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

关于如何在mongodb数据库中使用索引,这里分享一下。希望以上内容能够对大家有所帮助,可以学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人看到。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > mongodb数据库索引的使用方法

用户评论