QA1003:不区分大小写的 StartsWith 或 StringEquals 字符串比较

当查询使用不区分大小写的字符串比较函数时,将返回此顾问消息。 该消息阐明了原因并提供改进查询性能的指导。

属性

价值
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)