当查询使用 ENDSWITH 函数时,将返回此顾问消息。 该消息阐明了原因并提供改进查询性能的指导。
属性
| 价值 | |
|---|---|
| RuleID | QA1004 |
| 标题 | EndsWith |
| 类别 | Performance |
原因
查询使用 ENDSWITH。
规则说明
ENDSWITH 效率低于基于前缀的匹配。
ENDSWITH 需要使用完整索引扫描,其成本可能比执行精确索引扫描的函数要 STARTSWITH高。 若要了解不同类型的索引扫描之间的差异,请参阅 索引概述。
建议
如果比较逻辑允许,请创建并编制计算属性的索引,以反转字符串并使用 STARTSWITH 进行比较。
有关计算属性的详细信息,请参阅 计算属性。
Example
原始查询:
SELECT *
FROM c
WHERE ENDSWITH(c.name, "xyz")
若要改进此查询,请首先创建并索引一个反转该属性的计算属性:
{
"computedProperties": [
{
"name": "cp_reverseName",
"query": "SELECT VALUE REVERSE(c.name) FROM c"
}
]
}
然后使用以下更新的查询:
SELECT *
FROM c
WHERE STARTSWITH(cp_reverseName, "xyz")