我有以下搜索的要求:
SELECT * FROM root WHERE root.parentPath = 'value'
和
SELECT * FROM root WHERE STARTSWITH(root.parentPath,'value')
对于索引类型 hash
,第一个查询运行速度很快,第二个查询需要扫描,因此运行速度非常慢。
对于索引类型"range",第一个查询速度较慢,第二个查询速度较快。
为了支持这两个查询,我是否需要存储两次数据?当我尝试再次添加索引时,出现以下错误Duplicate indexes specified for the path
--编辑
我已将以下XML添加到索引的设置区域,它适用于范围或哈希,但不能同时使用两者。
{
"path": "/parentPath/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": 3
},
{
"kind": "Hash",
"dataType": "String",
"precision": 3
},
{
"kind": "Range",
"dataType": "Number",
"precision": -1
}
]
}
通常,哈希索引不应比范围索引具有查询性能优势。在某些情况下,由于索引冲突,哈希索引似乎可以提高查询性能。此处的建议是对所有索引路径坚持使用范围索引和精度 -1。
若要检查查询是否遇到索引冲突(索引利用率低(,请按照以下文章检索查询执行指标:https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query-metrics#query-execution-metrics