我有一个非常大的文档集(数亿个文档)
每个文件都是这样的
有大约50个不同的名字,~60种不同的类型1,~20种不同的类型2
我需要从这个数据库中读取,通常是:
目前我正在阅读而没有任何索引,而且非常慢!比有几个平面sql表慢得多......
如何使用索引来加速此数据库?
感谢
答案 0 :(得分:1)
以YYYY / MM / DD格式的日期
有MongoDB日期时间格式。用它。它使用的内存少于字符串,并且不需要额外的约定。您的格式是理智的,因为它的字典排序等同于0001-01-01和9999-12-31之间日期的时间顺序,但内置数据类型绝对适用于范围查询。
有大约50个不同的名字,~60种不同的类型1,~20种不同的类型2
您的密钥的选择性非常低,因此单个索引可能毫无意义
我需要从这个数据库中读取,通常是:
(name,type1,type2)
,但包含所有日期使用{name, type1, type2}
的复合索引。如果您还需要按时间顺序排序,则可能需要添加date
进行排序或使用像ObjectId这样的单色主键并依赖于自然排序。
db.collection.ensureIndex({'name' : 1, 'type1' : 1, 'type2' : 1, 'date' : 1});
type1
什么是几个约会'?我认为你的意思是"在给定的日期范围内的所有日期"?使用date
的索引。 date
自然应该具有更好的选择性,因此个别键是有意义的。
db.collection.ensureIndex({'date' : 1});
列出所有商品?任何订购?你需要更具体的东西。请注意,skip
/ take
费用昂贵。