如何减少此 mongo 数据库查找查询中的执行时间?
How to reduce execution time in this mongo db find query?
像这样记录示例数据,
{
"_id" : ObjectId("62317ae9d007af22f984c0b5"),
"productCategoryName" : "Product category 1",
"productCategoryDescription" : "Description about product category 1",
"productCategoryIcon" : "abcd.svg",
"status" : true,
"productCategoryUnits" : [
{
"unitId" : ObjectId("61fa5c1273a4aae8d89e13c9"),
"unitName" : "kilogram",
"unitSymbol" : "kg",
"_id" : ObjectId("622715a33c8239255df084e4")
}
],
"productCategorySizes" : [
{
"unitId" : ObjectId("61fa5c1273a4aae8d89e13c9"),
"unitName" : "kilogram",
"unitSize" : 10,
"unitSymbol" : "kg",
"_id" : ObjectId("622715a33c8239255df084e3")
}
],
"attributes" : [
{
"attributeId" : ObjectId("62136ed38a35a8b4e195ccf4"),
"attributeName" : "Country of Origin",
"attributeOptions" : [],
"isRequired" : true,
"_id" : ObjectId("622715ba3c8239255df084f8")
}
]
}
此集合已在“_id”中编入索引。没有子文档执行时间会减少,但所有文档字段都是必需的。
db.getCollection('product_categories').find({})
此集合包含 30000 条记录,此查询执行时间超过 30 秒。那么如何解决这个问题。有人问我更好的解决方案。谢谢
虽然问题不是很清楚,但您可以按照 this 文章了解一些最佳实践。
索引和复合索引将使它在每次查询时都使用缓存而不是扫描文档。 30.000 个文档对 MongoDB 来说不算什么,它可以在一秒钟内处理数百万个文档。如果这些字段是在查询的另一个繁重操作过程中填充的。
查看您的架构是否有效构建,或者您是否正在限制与服务器的连接。另一件需要考虑的事情是使用聚合管道仅投影您需要的字段。
像这样记录示例数据,
{
"_id" : ObjectId("62317ae9d007af22f984c0b5"),
"productCategoryName" : "Product category 1",
"productCategoryDescription" : "Description about product category 1",
"productCategoryIcon" : "abcd.svg",
"status" : true,
"productCategoryUnits" : [
{
"unitId" : ObjectId("61fa5c1273a4aae8d89e13c9"),
"unitName" : "kilogram",
"unitSymbol" : "kg",
"_id" : ObjectId("622715a33c8239255df084e4")
}
],
"productCategorySizes" : [
{
"unitId" : ObjectId("61fa5c1273a4aae8d89e13c9"),
"unitName" : "kilogram",
"unitSize" : 10,
"unitSymbol" : "kg",
"_id" : ObjectId("622715a33c8239255df084e3")
}
],
"attributes" : [
{
"attributeId" : ObjectId("62136ed38a35a8b4e195ccf4"),
"attributeName" : "Country of Origin",
"attributeOptions" : [],
"isRequired" : true,
"_id" : ObjectId("622715ba3c8239255df084f8")
}
]
}
此集合已在“_id”中编入索引。没有子文档执行时间会减少,但所有文档字段都是必需的。
db.getCollection('product_categories').find({})
此集合包含 30000 条记录,此查询执行时间超过 30 秒。那么如何解决这个问题。有人问我更好的解决方案。谢谢
虽然问题不是很清楚,但您可以按照 this 文章了解一些最佳实践。
索引和复合索引将使它在每次查询时都使用缓存而不是扫描文档。 30.000 个文档对 MongoDB 来说不算什么,它可以在一秒钟内处理数百万个文档。如果这些字段是在查询的另一个繁重操作过程中填充的。
查看您的架构是否有效构建,或者您是否正在限制与服务器的连接。另一件需要考虑的事情是使用聚合管道仅投影您需要的字段。