我有一个大的 mongodb 集合(300 万个文档,50 GB),即使我创建了索引,查询数据也会很慢。
db.collection.find({"C123":1, "C122":2})
例如即使我为 C123
和 C122
创建了单独的索引,查询也会超时或者会非常慢(至少 10 秒)。
我应该创建更多索引还是增加物理内存来加速查询?
最佳答案
对于这样的查询,您应该创建复合索引。一个在两个领域。然后它应该非常有效。创建单独的索引对您没有多大帮助,因为 MongoDB 引擎将首先使用来获取查询第一部分的结果,但是使用第二个 if 并没有多大帮助(甚至在某些情况下会因为查找而减慢查询速度索引表,然后再次在实际数据中)。您可以通过在 shell 中的查询上使用 .explain() 来确认已使用的索引。
查看复合索引:
https://docs.mongodb.com/manual/core/index-compound/
在制作索引时还要考虑对两个字段的排序方向。
https://stackoverflow.com/questions/42293823/
相关文章:
php - 在 Ubuntu 14 上将 PHP Mongo 扩展更新到 1.5
mongodb - 在 mongodb 中编辑子文档 N-N 关系
mongodb - 使用更新查询将文档值从字符串更改为 ObjectId
node.js - 从nodejs插入日期值到mongodb
mongodb - 如何将 MongoDB 存档文件转换为 JSON 格式?
node.js - NodeJS 崩溃 : Mongoose findById() does NOT
mongodb - 按 id 对 Mongo 文档进行分组,并按时间戳获取最新文档
ruby-on-rails - 运行 Rails 应用程序时的 Mongo::Error::NoSe