我的数据库中有两个集合:
// UnifiedPost
public class UnifiedPost
{
public UnifiedPost() { Id = ObjectId.GenerateNewId(); }
[BsonId]
public ObjectId Id { get; set; }
public int OriginalId { get; set; }
public string Thumbnail { get; set; }
public string Preview { get; set; }
[AlsoNotifyFor("IsVideo")]
public string FullSized { get; set; }
public char Rating { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public string Dimensions { get { return string.Format("{0}x{1}", Width, Height); } }
public int Score { get; set; }
[MongoDB.Bson.Serialization.Attributes.BsonIgnore]
public string Tags { get; set; }
public ICollection<ObjectId> TagIds { get; set; }
public char Site { get; set; }
public bool IsVideo { get { return FullSized.Contains(".mp4") || FullSized.Contains(".webm"); } }
public string UniversalId { get; set; } // UNIQUE index (Site + Original id; fe. S3001)
}
// Tag
public class Tag
{
public Tag() { }
public ObjectId Id { get; set; }
public string Name { get; set; }
}
截至目前,Posts
集合中有大约400万个条目。 db.Posts.find()
,db.Posts.find( { "_id": ObjectId(xyz) } )
和db.Posts.find( { "UniversalId": "S3001" } )
等查询将在几毫秒内返回结果。
另一方面,像.find( { "Site": "S" } ) or
。查找({&#34; OriginalId&#34;:{$ lt:&#34; 25&#34;}})`这样的查询可能需要30秒才能完成
我使用扩展方法向UniversalId
属性添加/更新唯一键:
if (!createIndex)
{
await postsColl.Indexes.AddOrUpdateAsync(new CreateIndexOptions() { Unique = true }, new IndexKeysDefinitionBuilder<UnifiedPost>().Ascending(o => o.UniversalId));
createIndex = true;
}
Site
拥有char
值,截至目前,该集合中有大约6种可能性。它可能会或可能不会进一步增加。
* OriginalId
只是int
,代表原始网站上的帖子。这个ID并不是唯一的,因为大约有1
个,2
个,3
个(等等),因为集合中有不同的网站。< / LI>
优化数据库的最佳方法是什么,以便我可以在合理的操作时间内根据这些属性查询帖子?
答案 0 :(得分:1)
优化数据库的最佳方法是什么,以便我可以在合理的操作时间内根据这些属性查询帖子?
当然,在这些字段上添加索引。