0

在 mongo 中,创建索引时,我试图确定以下查询是否会在 a) category_ids 和 status 或 b) category_ids、status 和 name 上有一个索引?

Source.where(category_ids: [1,2,3], status: Status::ACTIVE).order_by(:name) # ((Ruby/Mongoid code))

本质上,我想弄清楚索引是否应该包含 ORDER_BY 列?还是只有 WHERE 子句?我在哪里可以阅读更多关于此的信息?

4

1 回答 1

3

是的,关于这个特定查询的索引将有利于查询速度。但是这里有一个警告,索引字段的顺序。

我注意到您正在使用$inthere on category_ids$in此链接对于理解在排序上使用带有索引(或实际上是一般排序)存在的一点复杂性特别有用:http: //blog.mongolab.com/2012/06/cardinal-ins/

最后,它为您提供了适合您的查询类型的最佳索引顺序:

索引中字段的顺序应该是:

First, fields on which you will query for exact values.
Second, fields on which you will sort.
Finally, fields on which you will query for a range of values.

作为参考,其他几个有用的链接如下:

这些将帮助您开始优化索引并使它们适用于您的查询。

于 2013-02-12T08:54:50.267 回答