2013-02-26 10 views
0

我有以下情况:只是在查询中使用MongoDB的指数

  • 我有一个文档集合像
{a: 1, b: 'some string', c: 5, d: 7 } 
{a: 2, b: 'some another string', c: 5, d: 8 } 
{a: 3, b: 'yet another string', c: 5, d: 9 } 
  • 我允许用户搜索使用自定义查询,所以有时我可以搜索:
{a: 2, c:5} 
{c:5, d:8} 
  • 一些使用的字段的是强制性的(例如。 C)
  • 我想到了塞汀指标对C这样的查询会工作得更快,当我做:

db.my_collection.find({C:5})

它的伟大工程,但是当我启动:

db.my_collection.find({C:5,d:8})

它消耗的时间相同ommount时withought索引:(

所以我的问题是:是否有可能建立一些类型的部分索引,以便查询会排在首位的搜索里面有索引键和比在那些追求他们的人内部?

回答

0

我原来的答案不准确,我没有正确阅读。

所以我的问题是:是否有可能建立一些类型的部分索引,以便查询会在里面有指标,而且比那些里面他们withought钥匙首位的搜索?

MongoDB将已经这样做,但您可能在选择性,格式和大小d和文档整体上有问题。

即使MongoDB的已经过滤c通过索引它需要ScanObjects实际的数据,在分页文件。

d的选择性可能是这样的,你是从c子句返回大量的文件并导致d的巨大扫描。

所以这些因素一起可能会让您的查询变慢。

通常解决这个问题的最好方法是不要在这里使用部分索引,而只需要创建一个完整的复合索引。

+0

嗨我是不准确的 - 在我的例子中的索引只是在关键:c – 2013-02-26 12:22:02

+0

@WitekAdamus啊我认为我最初实际上是误读,我只是假设了一些,并没有完全阅读它。我现在明白了;嗯是的,这可能是真的,一个'c'上的索引和'c'和'd'上的查询会很慢,这取决于'd'是什么以及'c'的选择性,这是解决这个问题的典型方法是使用他们的复合索引 – Sammaye 2013-02-26 12:26:54

+0

@WitekAdamus好吧,我添加了一个答案,实际上回答了这个问题 – Sammaye 2013-02-26 12:47:08