第31章:MongoDB-索引--复合索引
创建组合索引(以后台模式创建)
db.user.ensureIndex({"username": 1, "age": 1}, {"background": true})
如果查询时发现没有使用到索引,可以使用hint函数强制使用索引查询
db.user.find().hint({"username": 1, "age": 1})
db.user.insert({"username": "zhangsan"}, {"address": {"road": "yijiang", "code": 666}})
对内嵌文档中字段创建索引
db.user.ensureIndex({"address.road": 1}, {"background": true})
db.user.find({"address.road": "yijiang"}).explain()
对数组创建索引,就是对数组中的每个元素分别创建索引,而不是对整个数组建立索引,对数组的每一个元素都创建索引,那么维护索引的代价就比普通的值大
db.user.insert({"username": "zhangsan"}, {"hobby": ["eat", "drink", "mm", "money"] })
db.user.ensureIndex({"hobby": 1}, {"background": true})
db.user.find({"hobby": "mm"}).explain()
对于复合索引,相同的键,键在索引中的顺序不同是属于不同的索引,如:{"username": 1, "age": 1}和{"age": 1,"username": 1}是不同的索引
对于复合索引,相同的键,每个键的排序不同也属于不同的键,如 {"username": 1, "age": 1}和{"username": 1, "age": -1}是属于不同的索引
对于相同的键,键出现的顺序相同,而每个键的排序都乘以 -11,是属于相同的索引,如 {"username": 1, "age": -1}和{"username": -1, "age": -1}
对于复合索引,存在隐式索引。隐式索引的意思是当对多个字段创建复合索引时,相当于也对所有字段组成的复合索引的前缀都创建了一个索引,例如 创建了复合索引:{"field1": 1, "field2": -1, "field3": -1, "field4": -1}, 也相当于同时创建了{"field1": 1}、{"field1": 1, "field2": -1}、{"field1": 1, "field2": -1, "field3": -1} 所有前缀组成的索引
可以创建复合索引,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列
如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用
第31章:MongoDB-索引--复合索引的更多相关文章
- 深入理解MongoDB的复合索引
更新时间:2018年03月26日 10:17:37 作者:Fundebug 我要评论 对于MongoDB的多键查询,创建复合索引可以有效提高性能.这篇文章主要给大家介绍了关于MongoDB复 ...
- 关于mongodb的复合索引新功能
最新在做一个项目,由于查询字段较多,且查询较频繁,所以我做了一个复合索引,将所有需要查询的字段都做到索引里,做了一个名为s_1_m_1_c_1_v_1_year_1_month_1_week_1_da ...
- mongodb索引 复合索引
当我们的查询条件不只有一个时,就需要建立复合索引,比如插入一条{x:1,y:2,z:3}记录,按照我们之前建立的x为1的索引,可是使用x查询,现在想按照x与y的值查询,就需要创建如下的索引 创 ...
- 关于mysql建立索引 复合索引 索引类型
这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问"hash和btree索引的差别",这非常难吗.仅仅 ...
- MySQL之索引复合索引有效性
首先这里建立一张数据表,并建立符合索引( index_A,index_B,index_C) CREATE TABLE `test_index_sequence` ( `Id` int(11) NOT ...
- MySQL 最左前缀(Leftmost Prefix) & 组合索引(复合索引,多列索引)
资料来源于网络,仅供参考学习. CREATE TABLE test(a INT,b INT,c INT,KEY idx(a,b,c)); 优: SELECT * FROM test WHERE a=1 ...
- 「生产事故」MongoDB复合索引引发的灾难
前情提要 11月末我司商品服务的MongoDB主库曾出现过严重抖动.频繁锁库等情况. 由于诸多业务存在插入MongoDB.然后立即查询等逻辑,因此项目并未开启读写分离. 最终定位问题是由于:服务器自身 ...
- 【Mongodb】视图 && 索引
准备工作 准备2个集合的数据,后面视图和索引都会用到1个订单集合,一个收款信息集合 var orders = new Array(); var shipping = new Array(); var ...
- MongoDB的查询索引
目录 为什么要建立索引? 索引的分类有哪些? _id索引 单键索引 多键索引 复合索引 过期索引 hello,今天是万圣节
- MySQL复合索引探究
复合索引(又称为联合索引),是在多个列上创建的索引.创建复合索引最重要的是列顺序的选择,这关系到索引能否使用上,或者影响多少个谓词条件能使用上索引.复合索引的使用遵循最左匹配原则,只有索引左边的列匹配 ...
随机推荐
- javaweb导出excel
百度找了半天也没找到一个提供有效思路的,全都告诉我此路不通 html表格数据粘贴到txt,然后改后缀为xsl,打开,发现二者无缝对接 @参考文章.@参考前任项目 /** * @todo * @para ...
- linq to sql语句中转换数据类型和日期操作
System.Data.Entity.SqlServer.SqlFunctions.StringConvert System.Data.Entity.DbFunctions
- 包含了重复的“Content”项。.NET SDK 默认包含你项目目录中的“Content”项。可从项目文件中删除这些项;如果希望将其显式包含在项目文件中,可将“EnableDefaultContentItems”属性设置为“false”
从.netcore 1.1 升级到2.0时遇到该问题. 参考http://www.cnblogs.com/xishuai/p/visual-studio-for-mac.html 根据提示可知(我是看 ...
- js document.load 和 document.ready 区别
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
- 自己在完第一遍STL和Directx 9.0 游戏开发编程基础书后的体会
如果一本书看一遍就能看懂,说明书对自己相对容易,没有必要在去看第二遍,但是对于大多数书籍,都有自己陌生的知识,看完一遍无法理解的地方,说明就是自己知识点最薄弱的,最需要去理解的地方,一旦自己理解了这些 ...
- istio prometheus预警Prometheus AlertManager
1.安装alertmanager kubectl create -f 以下文件 alertmanager-templates.yaml.configmap.yaml.deployment.yaml.s ...
- C# fckeditor浏览服务器和上传目录不一致,看不到上传过的文件
fckeditor在上传标签页面,传过文件后,在浏览服务器那里,看不到之前上传的文件,通过浏览服务器页面上传文件,保存的目录也和上传标签页面上传的不是同一个文件夹. 修改方法如下: 打开fckedit ...
- VS2013一次替换变量名
插件下载地址:https://visualstudiogallery.msdn.microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194 该插件目前只支持: ...
- essential c++ 第一章 array及vector相关使用
将对象初始化: 1.用等号(=)赋值运算符初始化,针对对象是内置类型或者对象可以单一值初始化 2.构造函数初始化,针对对象需要多个初始值的情况 单括号括住的字符表示字符常量(‘ ’): 第一个反斜线表 ...
- HDOJ4734 F(x)
原题链接 数位\(DP\),继续套记搜模板 定义\(f[pos][now]\),\(pos\)是枚举到的位数,\(now\)是\(A\)的权值减去当前枚举的数的权值,即剩余权值大小. 然后就是记搜模板 ...