【发布时间】:2017-08-07 07:45:25
【问题描述】:
我有以下代码从 DocumentDB 数据库中获取一些对象的列表:
var document = this._client.CreateDocumentQuery<T>(UriFactory.CreateCollectionUri(dbName, collectionName), queryOptions)
.Where(r => r.pDate >= startDate && r.pDate <= endDate);
var result = document.ToList();
pDate 的类型为DateTime,并以 ISO8601 格式的字符串存储在数据库中。
查询返回结果的时间过长,例如 4 到 5 分钟。当我跟踪程序时,程序卡住的是.ToList()。奇怪的是,查询会快速返回某些特定的开始和结束日期。
如果我将过滤器放在pDate 以外的某些字段上,查询也会很快返回一些结果。
我的设置与this document 中的解释一致,但除了少数例外情况外,我几乎一直都表现不佳。
我已经尝试了这里和那里提到的几种方法来解决问题,但到目前为止没有运气。感谢您对问题的任何评论或解决方案。
【问题讨论】:
-
我建议你将日期保存为 DateTime 看看性能是否更好
-
@MartinoBordin - 显然 Azure DocumentDB 不 原生支持
DateTime... 但既然它确实 支持Number,也许 OP 可以尝试将它们存储为纪元值。如中所述:Working with Dates in Azure DocumentDB. -
对不起,我误读了@hagh 已经在使用 DateTime 来查询(不是存储,你是对的 @Corak)数据。尝试添加 RangeIndex,如 here 所述
标签: c# datetime azure-cosmosdb iso8601