我正在经历 RegexMatch 并试图了解较大记录上的性能问题或不存在的问题(如果有)。
我的目标是获取 stockNumber 不精确的 10 位数字的记录。
文档示例1:
{
"id": "abc",
"stockNumber": "1001234567"
}
{
"id": "pqr",
"stockNumber": "200"
}
{
"id": "xyz",
"stockNumber": "200111"
}
正则表达式解决方案:
SELECT
*
FROM
c
WHERE
NOT RegexMatch(c.stockNumber, "^\\d{10}$")
Request Charge = 6.14 RUs
另一种添加新字段的方法:
{
"id": "abc",
"stockNumber": "1001234567",
"someFlag": false
}
{
"id": "pqr",
"stockNumber": "200",
"someFlag": true
}
{
"id": "xyz",
"stockNumber": "200111",
"someFlag": true
}
查询:
SELECT
*
FROM
c
WHERE
c.someFlag = true
Request Charge = 6.1 RUs
附加信息:
WHERE
子句。不确定它会产生多少差异。stockNumber
作为字符串,这一步是过滤掉此类记录。将固有较慢的正则表达式条件与优化器可能首先使用的更简单、更快的条件相结合,这将廉价地减少搜索空间:
SELECT *
FROM c
WHERE LEN(c.stockNumber) != 10
AND NOT RegexMatch(c.stockNumber, "^\\d{10}$")