Azure cosmosdb 用于日期时间的Azure Cosmos DB UDF严重减慢了查询速度
我们的日期存储为:Azure cosmosdb 用于日期时间的Azure Cosmos DB UDF严重减慢了查询速度,azure-cosmosdb,user-defined-functions,Azure Cosmosdb,User Defined Functions,我们的日期存储为:“2/22/2008 12:00:00 AM”。我们需要过滤结果,以便在两次之间获得文档 如果我们比较两个查询,一个使用UDF,另一个不使用,则使用UDF的查询要慢几个数量级 与: 没有: SELECT DISTINCT c.eh, c.wcm, w AS wt FROM c JOIN w IN c.wt WHERE w.ty = 'FW' OFFSET 0 LIMIT 10 以下是UDF: function userDefin
“2/22/2008 12:00:00 AM”
。我们需要过滤结果,以便在两次之间获得文档
如果我们比较两个查询,一个使用UDF,另一个不使用,则使用UDF的查询要慢几个数量级
与:
没有:
SELECT DISTINCT
c.eh, c.wcm, w AS wt
FROM
c
JOIN w IN c.wt
WHERE
w.ty = 'FW'
OFFSET 0
LIMIT 10
以下是UDF:
function userDefinedFunction(datestr){
return new Date(datestr).getTime();
}
根据(一位在Cosmos工作的微软员工)的说法,我应该可以做一个直接比较:
(w.ced BETWEEN '03/02/2023' AND '09/02/2023')
但这将返回0个结果。我对宇宙非常陌生。如何优化此查询?我应该补充一点,在
wt/ced
上已经有了idex。一般来说,如果您可以使用系统函数而不是UDF,性能会更好
然而,在这个场景中,您应该以一致的格式保存日期,以避免每次都必须使用UDF来修复它们
我建议你看看我们的网站
如果您能够在Cosmos DB中以一致的格式存储日期(推荐的格式遵循ISO 8601 UTC标准),那么您可以避免在查询本身中转换格式(这将非常昂贵)。如果需要,任何数据格式转换都应该在应用程序中完成。例如,在运行查询之前,将日期“03/02/2023”转换为ISO 8601 UTC标准(然后在查询中使用此文本)
希望这对您有所帮助。一般来说,如果您可以使用系统函数而不是UDF,性能会更好 然而,在这个场景中,您应该以一致的格式保存日期,以避免每次都必须使用UDF来修复它们 我建议你看看我们的网站 如果您能够在Cosmos DB中以一致的格式存储日期(推荐的格式遵循ISO 8601 UTC标准),那么您可以避免在查询本身中转换格式(这将非常昂贵)。如果需要,任何数据格式转换都应该在应用程序中完成。例如,在运行查询之前,将日期“03/02/2023”转换为ISO 8601 UTC标准(然后在查询中使用此文本)
希望这有帮助。谢谢马克。我们得出了相同的结论。无法使用当前日期格式修复查询。我们需要修正数据。谢谢马克。我们得出了相同的结论。无法使用当前日期格式修复查询。我们需要修正数据。
(w.ced BETWEEN '03/02/2023' AND '09/02/2023')