当查询使用不区分大小写的字符串比较函数时,将返回此顾问消息。 该消息阐明了原因并提供改进查询性能的指导。
属性
| 价值 | |
|---|---|
| RuleID | QA1003 |
| 标题 | CaseInsensitiveStartsWithOrStringEquals |
| 类别 | Performance |
原因
查询使用不区分 STARTSWITH 大小写或 StringEquals。
规则说明
不区分大小写的字符串搜索可能成本高昂。 例如,区分 STARTSWITH 大小写使用精确的索引扫描,但不区分大小写 STARTSWITH 使用 [扩展索引扫描](索引概述)。
建议
定义并编制计算属性的索引,该属性将字符串转换为小写(或大写)和与计算属性的区分大小写的比较。
Example
原始查询:
SELECT *
FROM c
WHERE StringEquals(c.name, "abc", true)
在 上创建计算属性 c.name
{
"computedProperties": [
{
"name": "cp_lowerName",
"query": "SELECT VALUE LOWER(c.name) FROM c"
}
]
}
索引 cp_lowerName 和使用以下更新的查询:
SELECT *
FROM c
WHERE StringEquals(c.name, "abc", false)