Mongodb(4)索引,查看执行计划,聚合操作aggregate,表关联查询,批量插入测试数据,执行计划分析详解

news/2024/10/21 18:16:14
  1. 创建索引,支持:单键索引、复合索引,唯一索引

创建索引后台执行

db.books.createIndex({open: 1, close: 1}, {background: true})

对内嵌文档字段创建索引:

db.books.createIndex({"author.name":1})

创建唯一索引

db.books.createIndex({title:1},{unique:true})

在包含嵌套对象的数组字段上创建多键索引

db.books.createIndex( { "stock.size": 1, "stock.quantity": 1 } )

Hash索引(Hashed Indexes)

db.users.createIndex({username : 'hashed'})

地理空间索引(Geospatial Index)
创建通配符索引

查看执行计划

db.books.find({type:"novel",favCount:{$gt:50}}).explain()

查看索引

查看索引信息

db.books.getIndexes()

查看索引键

db.books.getIndexKeys()

删除索引

删除集合指定索引

db.col.dropIndex("索引名称")

删除集合所有索引 不能删除主键索引

db.col.dropIndexes()

18.聚合操作aggregate,聚合框架相当于 SQL 查询中的GROUP BY、 LEFT OUTER JOIN 、 AS等
常用的管道聚合阶段
阶段运算符 描述 SQL等价运算符
$match 筛选条件 WHERE
$project 投影 AS
$lookup 左外连接 LEFT OUTER JOIN
$sort 排序 ORDER BY
$group 分组 GROUP BY
$skip/$limit 分页
$unwind 展开数组
$graphLookup 图搜索
$facet/$bucket 分面搜索

18.1 $project:字段别名,0 不显示的字段,1显示的字段
db.getCollection("books").aggregate([{$project:{name2: "$title"}}])
db.getCollection("books").aggregate([{$project:{name3: "$title",_id:0,type:1,author.name:1}}])

18.2 $match 筛选
db.books.aggregate([
{$match:{type:"technology"}},
{$project:{name:"$title",_id:0,type:1,author:{name:1}}}
])

18.3 $count 计数并返回与查询匹配的结果数
db.books.aggregate([
{$match:{type:"technology"}},
{$count: "type_count"} 4 ])

18.4 $group对文档进行分组
db.books.aggregate([
{$group:{_id:null,count:{$sum:1},pop:{$sum:"$favCount"},avg:{$avg:"$favCount"}}}
])

db.books.aggregate([
{$group:{_id:"$author.name",pop:{$sum:"$favCount"}}}
])

db.zips.aggregate( [
{ $group: { _id: "$state", totalPop: { $sum: "$pop" } } },
{ $match: { totalPop: { $gt: 1010001000 } } }] )

18.5 $lookup 多表关联查询,相当于左外链接
2表关联查询:
db.getCollection("books").aggregate(
[{
$lookup: {
from: "customer",
localField: "title",
foreignField: "name",
as: "booksName"
} }
])

3表关联查询:
db.order.aggregate([
{$lookup: {
from: "customer",
localField: "customerCode",
foreignField: "customerCode",
as: "curstomer"
}
},
{$lookup: {
from: "orderItem",
localField: "orderId",
foreignField: "orderId",
as: "orderItem"
}
}
])

mongoimport -h 192.168.65.174 -d test -u fox -p fox --authenticationDatabase=admin -c zips --file D:\zips.json

  1. 批量插入测试数据
    var tags = ["nosql","mongodb","document","developer","popular"];
    var types = ["technology","sociality","travel","novel","literature"];
    var books=[];
    for(var i=0;i<50;i++){
    var typeIdx = Math.floor(Math.random()types.length);
    var tagIdx = Math.floor(Math.random()
    tags.length);
    var tagIdx2 = Math.floor(Math.random()tags.length);
    var favCount = Math.floor(Math.random()
    100);
    var username = "xx00"+Math.floor(Math.random()10);
    var age = 20 + Math.floor(Math.random()
    15);
    var book = {
    title: "book-"+i,
    type: types[typeIdx],
    tag: [tags[tagIdx],tags[tagIdx2]],
    favCount: favCount,
    author: {name:username,age:age}
    };
    books.push(book)
    }
    db.books.insertMany(books);

db.getCollection("books").find({Asin:{$in:[
"B07SC9RTQ8",
"B07SC9RTQ9"
]}}).sort({"Asin":1})

db.getCollection("book").find()
db.getCollection("book").getIndexes()
db.getCollection("book").createIndex({"sku":1})
db.getCollection("book").createIndex({"categoryId":-1})

db.createCollection("book");

db.getCollection("book").insertOne({
uniqueId: "705f6c3aec584c47936b40502fbcafab",
siteCode: "US",
entityName: "Wall Washer Light",
categoryId: "228013,495224,495236,553784,14193181",
categoryName: "Tools & Home Improvement,Lighting & Ceiling Fans,Outdoor Lighting,Landscape Lighting,Spotlights",
status: NumberInt("1"),
addTime: ISODate("2024-10-18T17:32:18.254Z"),
updateTime: ISODate("2024-10-18T17:32:18.254Z"),
});

20.MongoDB执行计划分析详解

db.books.find({_id:"671609d23146000034003cf1"}).explain("queryPlanner")
db.books.find({_id:"671609d23146000034003cf1"}).explain()

queryPlanner 执行计划的详细信息,包括查询计划、集合信息、查询条件、最佳执行计划、查询方式和MongoDB 服务信息等
exectionStats 最佳执行计划的执行情况和被拒绝的计划等信息
allPlansExecution 选择并执行最佳执行计划,并返回最佳执行计划和其他执行计划的执行情况

winningPlan.stage状态分析
是stage的类型。类型列举如下:
COLLSCAN 全表扫描
IXSCAN 索引扫描
FETCH 根据索引检索指定文档
SHARD_MERGE 将各个分片返回数据进行合并
SORT 在内存中进行了排序
LIMIT 使用limit限制返回数
执行计划的返回结果中尽量不要出现以下stage:
SKIP 使用skip进行跳过
IDHACK 对_id进行查询
SHARDING_FILTER 通过mongos对分片数据进行查询
COUNTSCAN count不使用Index进行count时的stage返回
COUNT_SCAN count使用了Index进行count时的stage返回
SUBPLA 未使用到索引的$or查询的stage返回
TEXT 使用全文索引进行查询时候的stage返回
PROJECTION 限定返回字段时候stage的返回

执行计划的返回结果中尽量不要出现以下stage:
COLLSCAN(全表扫描)
SORT(使用sort但是无index)
不合理的SKIP
SUBPLA(未用到index的$or)
COUNTSCAN(不使用index进行count)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

多校A层冲刺NOIP2024模拟赛10

因为有好多人没有好好打,所以我认为我垫底了。 赛时rank 2,T1 0pts,T2 100pts,T3 0pts,T4 40pts,accoder上同分,rank 9。 T1 因为没输出挂了5pts,T4 爆搜挂了5pts,乐。 update:T3没有启发式合并被卡成rank 4了 神:wang5是下一个zh0ukangyang 岛屿 唐氏的推柿子题。 …

13、Linux网络管理

网络基本概念 物理地址/逻辑地址物理地址:硬件地址,如MAC地址。 逻辑地址:软件配置地址,如IP地址。网卡作用:连接计算机和网络的硬件设备。MAC地址 (Media Access Control)定义:媒体访问控制地址,唯一标识网络设备的硬件地址。IP地址 (Internet Protocol Address)格式示…

CSS速刷 - CSS动画

作用:引起注意、愉悦感、反馈、掩饰(加载过程)transition动画 补间动画,中间过程可以计算出来。transition: width 1s:意味动画属性是width,动画时间是1秒。delay: 动画延迟几秒再开始 transition-timing-function 缓动函数:可以自己定制。关键帧动画 animationanimation…

五款实用报表工具推荐:从山海鲸到 JasperReports,哪个更适合你?

概述 在现代数据驱动的商业环境中,选择一款合适的报表工具对于企业的决策制定和数据管理至关重要。本文将为您介绍五款各具特色的免费或开源报表工具,包括国内的山海鲸报表、开源的 Superset、云端友好的 Looker Studio 以及企业级的 Zoho Analytics 和 JasperReports。本文将…

数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年9月刊

本文为大家整理了墨天轮数据社区2024年9月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,欢迎参考。本文为大家整理了墨天轮数据社区2024年9月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据…

物理理机中没有VMNet1和VMNet8虚拟网卡,网络不通

主机ping不通虚拟机网络控制面板——网络连接——网络适配器 VMware Network Adapter VMnet1 VMware Network Adapter VMnet8 如果没有这两个虚拟网卡,虚拟机的网络会出现问题 # 解决办法-恢复虚拟网卡默认设置 1、下载并打开ccleaner,ccleaner官网:CCleaner Makes Your Com…

Linux_进程理解、状态与优先级(详细版)

1.进程的概念 课本概念:程序的一个执行实例,正在执行的程序等。 内核观点:担当分配系统资源(CPU时间,内存)的实体。 其实:进程=内核的相关管理数据结构(task_struct、页表等)+程序的代码和数据task_struct:是描述进程的结构体,是Linux内核的一种数据结构,它会被装载…

12、用户和权限管理

用户组与用户管理 用户组(Group) 用户组用于方便权限分配。 常见部门组:北京核心 研究院-教研中心-北京教学部 研究院-研发中心-长沙研发 研究院-售后VIP服务中心 研究院-教研中心-长沙教学部组ID(GID)分类:root用户组:GID=0 程序用户组(系统用户组):1-999 (CentOS7)…