Couchbase 5.5:为什么在meta.id中添加'\\'会使搜索更快?

问题描述 投票:1回答:1

Couchbase 5.5 N1Ql

我在沙箱沙发基础数据库中有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倍?下划线不好吗?我是否应该逃避任何其他角色以提高性能

couchbase n1ql
1个回答
3
投票

_是通配符以匹配该位置的任何字符。如果你想要完全搜索,你需要逃避它。在https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/comparisonops.html结账

由于您的结果相同,您可能在该地方没有任何其他角色。如果您在_处有任何其他角色,则结果会有所不同。

由于IndexScans无法在通配符上完成,因此在第一张外卡之前,IndexScan会在前缀字符串上完成。这就是没有转义字符的原因IndexScan产生更多结果并花费时间。通过转义_,通配符从%开始。

请解析并检查Spans的正确性并进行优化。

Checkout第152页,如何将谓词转换为IndexScan跨越https://blog.couchbase.com/wp-content/uploads/2017/10/N1QL-A-Practical-Guide-2nd-Edition.pdf Checkout使用请求分析优化查询。

© www.soinside.com 2019 - 2024. All rights reserved.