当查询使用 CONTAINS 函数时,将返回此顾问消息。 该消息阐明了原因并提供改进查询性能的指导。
属性
| 价值 | |
|---|---|
| RuleID | QA1002 |
| 标题 | Contains |
| 类别 | Performance |
原因
查询使用 CONTAINS 函数。
规则说明
CONTAINS 成本高昂且速度缓慢,因为它需要完全扫描。
建议
如果使用的意图 CONTAINS 是在字符串前缀上匹配,请 STARTSWITH 改用,这将执行精确的索引扫描,并且更具成本效益。
如果要执行不区分大小写的字符串搜索,请考虑改为定义和索引用于投影 LOWER(c.stringSearchProperty) 和使用区分大小写的字符串搜索的计算属性。
Example
原始查询:
SELECT *
FROM c
WHERE CONTAINS(c.category, "Historical")
查询的意图是搜索 category 该查询的 Historical开头。 在这种情况下,以下查询具有更好的计算属性 c.cp_category性能:
SELECT *
FROM c
WHERE STARTSWITH(c.cp_category, "historical")