最近用mongodb来做一个项目,在看其关于复合索引部分的时候有一个疑惑:
“复合索引同样可用于局部属性的搜索,但必须依照索引字段顺序。比如创建索引字段顺序 "a,b,c",那么仅对 "a,b,c"、"a,b"、"a" 查询有效,而对 "b,c" 之类的组合无效。”
来源:传说中”雨痕“的博客 http://www.rainsts.net/article.asp?id=1033
这不是跟mysql的复合索引一致么?真的是这样么?继续对这个问题的探究。
查阅mongodb的官网,有这样一段描述:
New in 1.6+
Now you can also use the compound index to service any combination of equality and range queries from the constitute fields. If the first key of the index is present in the query, that index may be selected by the query optimizer. If the first key is not present in the query, the index will only be used if hinted explicitly. While indexes can be used in many cases where an arbitrary subset of indexed fields are present in the query, as a general rule the optimal indexes for a given query are those in which queried fields precede any non queried fields.
初读一遍,发现惊喜,1.6+上的新特性? 难道当前的复合索引已经支持任意复合索引的组合子集了么?怀着期待去操作了一把:
首先参看子集的版本是否1.6+:
> db.version()
1.6.5
然后查看我自己的collections的复合索引:
> db.caption.getIndexes()
[
{
"name" : "_id_",
"ns" : "Caption.caption",
"key" : {
"_id" : 1
}
},
{
"name" : "movie_longth",
"ns" : "Caption.caption",
"key" : {
"movieID" : 1,
"longth" : 1
},
"unique" : false,
"_id" : ObjectId("4d2d714b4637c31478000001")
}
]
Ok ,现在尝试只用复合索引中的后一字段longth来查询:
> db.caption.find({longth:{$lt:20}}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 5,
"nscannedObjects" : 5,
"n" : 2,
"millis" : 0,
"indexBounds" : {
}
}
失望,并没有期望中的使用到索引。
尝试查询longth,以movieID排序:
> db.caption.find({longth:{$lt:20}}).sort({movieID:1}).explain()
{
"cursor" : "BtreeCursor movie_longth",
"nscanned" : 2,
"nscannedObjects" : 2,
"n" : 2,
"millis" : 0,
"indexBounds" : {
"movieID" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
],
"longth" : [
[
-1.7976931348623157e+308,
20
]
]
}
}
就是说放过来仍然是能够用到索引的。
nice,验证想法应该可以对任意子集生效的。再次细读官网的说明,发现重点:
” If the first key of the index is present in the query, that index may be selected by the query optimizer. If the first key is not present in the query, the index will only be used if hinted explicitly. “
意思是说如果第一键出现默认是能被优化器用到index的,如果第一键未出现,但还是可以显示指定使用组合索引的,遂继续尝试:
> db.caption.find({longth:{$lt:20}}).hint({movieID:1,longth:1}).explain()
{
"cursor" : "BtreeCursor movie_longth",
"nscanned" : 2,
"nscannedObjects" : 2,
"n" : 2,
"millis" : 0,
"indexBounds" : {
"movieID" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
],
"longth" : [
[
-1.7976931348623157e+308,
20
]
]
}
}
这样总算可以让复合索引被任意子集所使用上了。
通过这个小细节的测试和探究,得出一个结论:当我们在网络上查阅资料时,请注意出处以及时间,特别是开源的内容,开源力量不断壮大,更新也是非常迅速,可能的老规则已经有新的替代;非常感谢雨痕的分享让大家熟悉了解到mongodb的使用,但从其文章的时间来看是2010-07,那个时候mongodb的版本还在1.4.5-, 而当前已经在12/9/2010发布了1.6.5。
也给自己在平时做项目使用开源内容的时候多了一份提示:多跟进官网的资料,update新特性。
http://johnnychenjun.blog.163.com/blog/static/1374934062011012103129303/
相关推荐
11. 策略创建索引:创建索引应根据查询需求,如创建单键索引支持单键查询,或创建复合索引支持多种查询和排序。 12. 覆盖查询:当索引包含所有查询所需的信息时,可以进行覆盖查询,减少对原始文档的访问。例如,`...
7. **索引支持**:MongoDB支持多种类型的索引,如单字段索引、复合索引、文本索引等,帮助优化查询性能。 在提供的压缩包中,有两个文件: - `mongodb-win32-x86_64-2.0.6.zip` 是Windows平台的64位MongoDB二进制...
修炼成Javascript中级程序员必知必会_资源分享
内容概要:本文详细介绍了如何使用MATLAB的深度学习工具箱,在果树病虫害识别任务中从数据准备、模型设计、训练优化到最后的模型评估与应用全流程的具体实施步骤和技术要点。涵盖了MATLAB深度学习工具箱的基本概念及其提供的多种功能组件,如卷积神经网络(CNN)的应用实例。此外,文中还具体讲述了数据集的收集与预处理方法、不同类型的深度学习模型搭建、训练过程中的超参数设定及其优化手段,并提供了病虫害识别的实际案例。最后展望了深度学习技术在未来农业领域的潜在影响力和发展前景。 适合人群:对深度学习及农业应用感兴趣的科研人员、高校师生和相关从业者。 使用场景及目标:①希望掌握MATLAB环境下构建深度学习模型的方法和技术细节;②从事果树病虫害管理研究或实践,寻找高效的自动化解决方案。 阅读建议:在阅读本文之前,建议读者熟悉基本的MATLAB编程环境及初步了解机器学习的相关概念。针对文中涉及的理论和技术难点,可以通过官方文档或其他教程进行补充学习。同时,建议动手实践每一个关键点的内容,在实践中加深理解和掌握技能。
nodejs010-nodejs-block-stream-0.0.7-1.el6.centos.alt.noarch.rpm
机械模型与技术交底书的融合:创新点详解与解析,机械模型加技术交底书,有创新点 ,机械模型; 技术交底书; 创新点,创新机械模型与技术交底书详解
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
nodejs010-nodejs-cmd-shim-1.1.0-4.1.el6.centos.alt.noarch.rpm
西门子四轴卧加后处理系统:828D至840D兼容,四轴联动高效加工解决方案,支持图档处理及试看程序。,西门子四轴卧加后处理,支持828D~840D系统,支持四轴联动,可制制,看清楚联系,可提供图档处理试看程序 ,核心关键词:西门子四轴卧加后处理; 828D~840D系统支持; 四轴联动; 制程; 联系; 图档处理试看程序。,西门子四轴卧加后处理程序,支持多种系统与四轴联动
基于黏菌优化算法(SMA)的改进与复现——融合EO算法更新策略的ESMA项目报告,黏菌优化算法(SMA)复现(融合EO算法改进更新策略)——ESMA。 复现内容包括:改进算法实现、23个基准测试函数、多次实验运行并计算均值标准差等统计量、与SMA对比等。 程序基本上每一步都有注释,非常易懂,代码质量极高,便于新手学习和理解。 ,SMA复现;EO算法改进;算法实现;基准测试函数;实验运行;统计量;SMA对比;程序注释;代码质量;学习理解。,标题:ESMA算法复现:黏菌优化与EO算法融合改进的实证研究
基于MATLAB的Stewart平台并联机器人仿真技术研究与实现:Simscape环境下的虚拟模拟分析与应用,MATLAB并联机器人Stewart平台仿真simscape ,MATLAB; 并联机器人; Stewart平台; 仿真; Simscape; 关键技术。,MATLAB中Stewart平台并联机器人Simscape仿真
Grad-CAM可视化医学3D影像
探索comsol泰勒锥:电流体动力学的微观世界之旅,comsol泰勒锥、电流体动力学 ,comsol泰勒锥; 电流体动力学; 锥形结构; 电场影响,COMSOL泰勒锥与电流体动力学研究
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
PFC6.03D模型动态压缩模拟与SHPB霍普金森压杆系统理论及实验数据处理技术解析,PFC6.03D模型,动态压缩模拟,还包括: SHPB霍普金森压杆系统理论知识介绍,二波法和三波法处理实验数据,提出三波波形,计算动态压缩强度等 ,PFC模型; 动态压缩模拟; SHPB霍普金森压杆系统; 理论介绍; 二波法处理; 三波法处理; 三波波形; 动态压缩强度。,"PFC模型下的动态压缩模拟及SHPB理论实践研究"
ProASCI 开发板原理图,适用于A3P3000
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:pykde4-devel-4.10.5-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pykde4-devel-4.10.5-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
基于Comsol模拟的三层顶板随机裂隙浆液扩散模型:考虑重力影响的瞬态扩散规律分析,Comsol模拟,考虑三层顶板包含随机裂隙的浆液扩散模型,考虑浆液重力的影响,模型采用的DFN插件建立随机裂隙,采用达西定律模块中的储水模型为控制方程,分析不同注浆压力条件下的浆液扩散规律,建立瞬态模型 ,Comsol模拟; 随机裂隙浆液扩散模型; 浆液重力影响; DFN插件; 达西定律模块储水模型; 注浆压力条件; 浆液扩散规律; 瞬态模型,Comsol浆液扩散模型:随机裂隙下考虑重力的瞬态扩散分析