Couchbase 5.5:为什么将 '\\' 放在 meta.id 中可以加快搜索速度?
Couchbase 5.5: Why does putting '\\' in meta.id make search faster?
沙发底座 5.5
N1Ql
我在沙盒 couchbase 数据库中有 150k 个文档,其中文档名称采用以下格式:
alpha_model::XXXXXXX::version
当我运行这个命令时:
SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha_model::100004993::%" LIMIT 10;
结果数:5。经过的时间是 1.13s
但是,当我在 '_' 之前添加 '\' 时,性能会大大提高
SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha\_model::100004993::%" LIMIT 10;
结果数:5。经过的时间是 8.16ms
为什么第二种方式快了 100 多倍?下划线不好吗?是否还有其他字符我应该转义以提高性能
_ 是匹配该位置任何字符的通配符。如果你想精确搜索,你需要转义它。在 https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/comparisonops.html
点赞
你可能在那个地方没有任何其他角色,因为你的结果是一样的。如果您在 _ 处有任何其他字符,结果将不同。
由于无法对通配符进行 IndexScan,IndexScan 对前缀字符串进行直到第一个通配符。这就是没有转义字符 IndexScan 产生更多结果并花费时间的原因。通过转义 _,通配符从 %.
开始
执行 EXPLAIN 并检查 Span 的正确性和优化。
检查第 152 页,谓词如何转换为 IndexScan 跨度 https://blog.couchbase.com/wp-content/uploads/2017/10/N1QL-A-Practical-Guide-2nd-Edition.pdf
结帐页面 341 使用请求分析优化查询。
沙发底座 5.5 N1Ql
我在沙盒 couchbase 数据库中有 150k 个文档,其中文档名称采用以下格式:
alpha_model::XXXXXXX::version
当我运行这个命令时:
SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha_model::100004993::%" LIMIT 10;
结果数:5。经过的时间是 1.13s
但是,当我在 '_' 之前添加 '\' 时,性能会大大提高
SELECT META().id FROM Q1036628 WHERE META().id LIKE "alpha\_model::100004993::%" LIMIT 10;
结果数:5。经过的时间是 8.16ms
为什么第二种方式快了 100 多倍?下划线不好吗?是否还有其他字符我应该转义以提高性能
_ 是匹配该位置任何字符的通配符。如果你想精确搜索,你需要转义它。在 https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/comparisonops.html
点赞你可能在那个地方没有任何其他角色,因为你的结果是一样的。如果您在 _ 处有任何其他字符,结果将不同。
由于无法对通配符进行 IndexScan,IndexScan 对前缀字符串进行直到第一个通配符。这就是没有转义字符 IndexScan 产生更多结果并花费时间的原因。通过转义 _,通配符从 %.
开始执行 EXPLAIN 并检查 Span 的正确性和优化。
检查第 152 页,谓词如何转换为 IndexScan 跨度 https://blog.couchbase.com/wp-content/uploads/2017/10/N1QL-A-Practical-Guide-2nd-Edition.pdf 结帐页面 341 使用请求分析优化查询。