我目前面临与Cosmos DB的查询性能问题,我很确定我已经关注了Microsoft页面的大部分性能提示,但仍然查询需要> 1秒。
连接政策
private static readonly ConnectionPolicy ConnectionPolicy = new ConnectionPolicy
{
ConnectionMode = ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp,
RequestTimeout = new TimeSpan(1, 0, 0),
MaxConnectionLimit = 1000,
RetryOptions = new RetryOptions
{
MaxRetryAttemptsOnThrottledRequests = 10,
MaxRetryWaitTimeInSeconds = 60
}
};
文档客户端
this.Client = new DocumentClient(new Uri(config.DocumentDBURI), config.DocumentDBKey, ConnectionPolicy);
文档查询
FeedOptions options = new FeedOptions
{
MaxItemCount = config.getSearchLimit,//// which is 100
PartitionKey = new PartitionKey(partitionKey),
RequestContinuation = responseContinuation
};
var documentQuery = Client.CreateDocumentQuery<SearchByAttributesResult>(
this.TenantCollectionUri,
querySpec,
options).AsDocumentQuery();
查询1
SELECT p.Doc.id, p.Doc.Name, p.Doc.isOrganization,p.Doc.organizationLegalName, p.Doc.isFactoryAutoUpdate,p.Doc.StartDate, p.Doc.EndDate, p.Doc.InactiveReasonCode,p.Doc.Specialty.specialty AllSpecialty, Address from p JOIN Address IN p.Doc.Address.address WHERE (p.Doc.EndDate = null or (p.Doc.StartDate <= @STARTDATE and p.Doc.EndDate >= @ENDDATE)) and CONTAINS(p.Doc.Name, @PROVIDERNAME) and Address.alpha2Code= @ALPHA2CODE
查询2
SELECT p.Doc.id, p.Doc.Name, p.Doc.isOrganization,p.Doc.organizationLegalName, p.Doc.isFactoryAutoUpdate,p.Doc.StartDate, p.Doc.EndDate, p.Doc.InactiveReasonCode,p.Doc.Specialty.specialty AllSpecialty, Address from p JOIN Address IN p.Doc.Address.address WHERE (p.Doc.EndDate = null or (p.Doc.StartDate <= @STARTDATE and p.Doc.EndDate >= @ENDDATE)) and STARTSWITH(Address.postalCode, @POSTALCODE) and Address.alpha2Code= @ALPHA2CODE
以上查询根据用户搜索条件进行更改
我的收藏中只有900个文档,但查询总是需要> 1秒。
试图了解这里的几点
我在这里做错了什么,如何将查询性能提高到亚秒(<.5s)
首先,MaxItemCount并不意味着您将获得前100个文档。
这意味着ExecuteNextAsync
的每次迭代一次最多可返回100个文档,但最多可返回与此查询匹配的所有内容。
如果要将结果限制在前100,那么在LINQ中使用.Take(100)
方法在使用AsDocumentQuery
之前或在SQL中使用TOP
关键字。
在性能方面,这有三个原因。
CONTAINS/STARTSWITH
功能。此时,如果不能更改架构,我建议您阅读有关Indexing的更多信息并根据应用程序的查询要求对其进行优化。