我需要一些建议来创建和排序mongo中的索引。如何在mongodb中构造复合索引
我有一个收集后用5个属性:
帖子
- 状态
- 开始日期
- 结束日期
- lowerCaseTitle
- 中将sortOrder
几乎所有的帖子都会有相同的状态1,只有少数人会有被拒绝的状态。我所有的查询都会过滤状态,开始和结束日期,并按sortOrder进行排序。我也会有一个查询在标题上进行正则表达式搜索。
我应该在{status:1,start:1,end:1,sort:1}上设置复合键吗?我把这些字段放在复合索引中的顺序是否重要 - 我应该首先将状态放在复合索引中,因为它是最广泛的吗?对每个房产做一个复合指数而不是单一指数会更好吗? mongo只对任何给定的查询使用单个索引吗?
如果我正在做的正则表达式查询lowerCaseTitle有索引吗?
样本查询是:
db.posts.find({status: {$gte:0}, start: {$lt: today}, end: {$gt: today}}).sort({sortOrder:1})
db.posts.find({lowerCaseTitle: /japan/, status:{$gte:0}, start: {$lt: today}, end: {$gt: today}}).sort({sortOrder:1})
排序键不应总是在用于查询的最后一个键之后。如果提前使用排序键,则排序会在修剪之前进行。 [这篇文章](http://architects.dzone.com/articles/cardinal-ins-mongodb-query)说明了这是有用的。 – 2013-06-30 00:21:05
有趣。我会做一些测试来看看实际的真实世界的性能特点。我不得不说,我有点怀疑这是永远在现实世界情况下的性能改进(读;大数据集,范围查询的高选择性) – 2013-07-04 09:54:37
@RemonvanVliet关于基数和忽略索引前缀优化,应复合索引键按最高到最低基数还是从最低到最高排序?我查阅了涉及复合索引的mongodb文档,并对这个具体问题做出了回答;尽管我假设从最高到最低。另外:从2.6开始,mongodb支持索引交集的2个索引。 – zamnuts 2015-01-19 21:18:32