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

Mongodb索引使用限制

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第85篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

通过在Mongodb添加索引,能够提高Mongodb查询效率。但在索引在使用当中也会有一些限制。本文结合官方文档,介绍Mongodb索引使用上的一些限制。

每个集合的索引数量

单个集合当中,最多可以添加64个索引

复合索引字段数量

复合索引当中,最多包含32个字段

特殊索引查询

用户不可以将文本查询$text中创建的索引与另外一种特殊类型的索引共同使用。如用户不能够共同使用$text查询和$near操作符。

二维空间索引仅能包含地理信息数据

带有二维空间索引的字段必须保存GeoJSON数据类型或者坐标值。如果用户向二维空间索引字段插入其他类型的数据,或向包含其他数据类型的字段建立二维空间索引时,mongodb会报错。

二维空间索引键数量限制

为了生成二维空间索引,mongodb将GeoJSON类型的数据匹配到mongodb内部的一种数据展现方式。这种数据匹配过程可能会生成一个特别大的数组。

而当mongodb为数组字段创建索引时,mongdb会为每一个数据元素创建一个索引键。对于复合索引,mongod计算为每个字段生成的键集的笛卡尔乘积。构建笛卡尔乘积的两个数据集特别大时,数据计算的过程中可能会超过mongodb的内存限制。为了保证mongodb不会出现内存限制问题,mongodb使用参数indexMaxNumGeneratedKeysPerDocument 限制单个文档生成索引时最大键的数量。默认值是100000.当构建索引时,超过这个限制数量,mongodb会报错。

NaN值的处理

在索引覆盖查询中,使用WiredTiger引擎时,NaN的数字类型是double

多键索引

多键索引不能覆盖不在相同数组的字段。

地理信息索引

地理信息索引不支持索引覆盖查询

索引构建时的内存使用

createIndexes方法支持在一个集合中建立一个或多个索引。这个方法在构建索引时结合使用内存和临时文件。默认分配200Mb内存给createIndexes方法。当createIndexes方法创建多个索引时,构建多个索引过程中共用这200Mb的空间。当默认分配的创建索引内存空间被占满是,mongodb使用临时文件来继续构建索引。这些临时文件保存在--dbpath参数配置的路径下的_tmp文件夹当中。用户可以通过指定参数 maxIndexBuildMemoryUsageMegabytes 来修改这个默认的索引构建内存。分配更大的内存,会提高索引的构建效率。但过高的内存分配,可能会导致操作系统的内存使用过多,甚至服务重启。

用户通过createIndexes方法或者使用数据库管理中的数据初始同步命令时,都会触发索引构建。这些索引构建需要的内存大小,都是由参数maxIndexBuildMemoryUsageMegabytes指定的。单个集合的数据初始同步,没有什么内存使用风险。但用户很有可能同时触发多个数据库的数据初始同步,这样的同步操作内存使用很有可能超过限制。

字符序和索引类型

文本索引和二维索引斤支持简单的二进制比较,不支持字符序。

隐藏索引

用户不可以隐藏默认的_id字段索引

用户不可以在hint()方法中使用隐藏索引

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【spark】Exception in thread “main“ ExitCodeException exitCode=-1073741701
  • 记录一次微信小程序申诉定位权限过程
  • Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】
  • MACOS查看硬盘读写量
  • 【JavaWeb程序设计】Servlet(二)
  • linux 内核 红黑树接口说明
  • 股票分析系统设计方案大纲与细节
  • 基于对称点模式SDP(SDP, symmetrized dot pattern)轴承故障诊断方法(matlab和python实现开源)
  • 高并发内存池联调问题
  • 链表 OJ(一)
  • LIO-SAM编译ubuntu20.04 Noetic
  • Python地图可视化三大秘密武器
  • 数智驱动丨zAIoT 连续落地军工、科研院所和机械制造场景,推动数智化转型升级...
  • base SAS programming学习笔记10(combine data)
  • java synchronized关键字介绍
  • [笔记] php常见简单功能及函数
  • 【Linux系统编程】快速查找errno错误码信息
  • Javascript 原型链
  • js正则,这点儿就够用了
  • js中的正则表达式入门
  • mysql中InnoDB引擎中页的概念
  • Python语法速览与机器学习开发环境搭建
  • React-生命周期杂记
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 前端面试题总结
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 算法-图和图算法
  • 怎样选择前端框架
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #在 README.md 中生成项目目录结构
  • (007)XHTML文档之标题——h1~h6
  • (4)(4.6) Triducer
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LeetCode 49)Anagrams
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (黑马C++)L06 重载与继承
  • (三)终结任务
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)UDP基本编程步骤
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)大型网站架构演变和知识体系
  • *** 2003
  • ******之网络***——物理***
  • .net core 6 redis操作类
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 设计一套高性能的弱事件机制
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net6+aspose.words导出word并转pdf
  • .net生成的类,跨工程调用显示注释
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @Validated和@Valid校验参数区别
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具