当前位置: 首页 > news >正文

6.如何判断数据库搜索是否走索引?

img

判断是否使用索引搜索

索引在数据库中是一个不可或缺的存在,想让你的查询结果快准狠,还是需要索引的来帮忙,那么在mongo中如何判断搜索是不是走索引呢?通常使用执行计划(解释计划、Explain Plan)来查看查询的情况,如查询耗费的时间、是否基于索引查询等。

索引语法

db.collection.find(query,options).explain(options)

创建索引前

查看根据name查询数据的情况:

> db.user.find({"name":"张三"}).explain()
{explainVersion: '1',queryPlanner: {namespace: 'test.user',indexFilterSet: false,parsedQuery: {name: {'$eq': '张三'}},queryHash: 'A2F868FD',planCacheKey: 'A2F868FD',maxIndexedOrSolutionsReached: false,maxIndexedAndSolutionsReached: false,maxScansToExplodeReached: false,winningPlan: {stage: 'COLLSCAN',filter: {name: {'$eq': '张三'}},direction: 'forward'},rejectedPlans: []},command: {find: 'user',filter: {name: '张三'},'$db': 'test'},serverInfo: {host: 'ADMIN',port: 27017,version: '7.0.6',gitVersion: '66cdc1f28172cb33ff68263050d73d4ade73b9a4'},serverParameters: {internalQueryFacetBufferSizeBytes: 104857600,internalQueryFacetMaxOutputDocSizeBytes: 104857600,internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,internalDocumentSourceGroupMaxMemoryBytes: 104857600,internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,internalQueryProhibitBlockingMergeOnMongoS: 0,internalQueryMaxAddToSetBytes: 104857600,internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,internalQueryFrameworkControl: 'trySbeRestricted'},ok: 1
}

关键点看: "stage" : "COLLSCAN", 表示全集合扫描

image-20240314233813092

image-20240314233637504

创建索引后

下面对name建立索引

db.user.createIndex({name:1})

看效果

> db.user.find({"name":"张三"}).explain()
{explainVersion: '1',queryPlanner: {namespace: 'test.user',indexFilterSet: false,parsedQuery: {name: {'$eq': '张三'}},queryHash: 'A2F868FD',planCacheKey: 'A3E454E0',maxIndexedOrSolutionsReached: false,maxIndexedAndSolutionsReached: false,maxScansToExplodeReached: false,winningPlan: {stage: 'FETCH',inputStage: {stage: 'IXSCAN',keyPattern: {name: 1},indexName: 'name_1',isMultiKey: false,multiKeyPaths: {name: []},isUnique: false,isSparse: false,isPartial: false,indexVersion: 2,direction: 'forward',indexBounds: {name: ['["张三", "张三"]']}}},rejectedPlans: []},command: {find: 'user',filter: {name: '张三'},'$db': 'test'},serverInfo: {host: 'ADMIN',port: 27017,version: '7.0.6',gitVersion: '66cdc1f28172cb33ff68263050d73d4ade73b9a4'},serverParameters: {internalQueryFacetBufferSizeBytes: 104857600,internalQueryFacetMaxOutputDocSizeBytes: 104857600,internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600,internalDocumentSourceGroupMaxMemoryBytes: 104857600,internalQueryMaxBlockingSortMemoryUsageBytes: 104857600,internalQueryProhibitBlockingMergeOnMongoS: 0,internalQueryMaxAddToSetBytes: 104857600,internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600,internalQueryFrameworkControl: 'trySbeRestricted'},ok: 1
}

关键点看: "stage" : "IXSCAN" ,基于索引的扫描

image-20240314234018601

compass查看:
image-20240314234112535

建立的索引是否有效,效果如何,都需要通过执行计划查看,以此来判断你的SQL是否需要优化,是否需要创建索引,耗时多久等等,用处可不少呢。

相关文章:

  • 还是了解下吧,大语言模型调研汇总
  • php 对接IronSource海外广告平台收益接口Reporting API
  • vue3项目实战-第六章-登录页(表单校验/模板适配/Pinia管理用户数据/持久化存储)
  • 大数据是如何嗅探和捕捉我们的偏好的
  • el-select 选择后获取key 和label的值
  • Wireshare捕获接口中没有本地连接
  • 解决在命令行中输入py有效,输入python无效,输入python会跳转到microsoft store的问题| Bug
  • wayland(xdg_wm_base) + egl + opengles 渲染使用纹理贴图的旋转 3D 立方体实例(十三)
  • JavaSE(上)-Day7
  • 什么是委托,委托的本质是什么?
  • 爱奇艺 CTR 场景下的 GPU 推理性能优化
  • LeetCode 热题100 链表专题解析
  • ElasticSearch第二章(ES8.X的使用)
  • jvm的垃圾回收器以及触发full gc的场景
  • 概率基础——逻辑回归多分类法
  • Bootstrap JS插件Alert源码分析
  • CentOS从零开始部署Nodejs项目
  • ES学习笔记(12)--Symbol
  • Github访问慢解决办法
  • gops —— Go 程序诊断分析工具
  • javascript 哈希表
  • js学习笔记
  • js中forEach回调同异步问题
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Twitter赢在开放,三年创造奇迹
  • 反思总结然后整装待发
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端js -- this指向总结。
  • 前言-如何学习区块链
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 小程序button引导用户授权
  • hi-nginx-1.3.4编译安装
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #include到底该写在哪
  • #Z2294. 打印树的直径
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (09)Hive——CTE 公共表达式
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (五)MySQL的备份及恢复
  • (译)2019年前端性能优化清单 — 下篇
  • .axf 转化 .bin文件 的方法
  • .form文件_SSM框架文件上传篇
  • .net core 连接数据库,通过数据库生成Modell
  • .Net Core与存储过程(一)
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .Net Winform开发笔记(一)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .Net中ListT 泛型转成DataTable、DataSet