Couchbase 5.5:为什么将'\\'放在meta.id中可以加快搜索速度?

时间:2019-02-18 16:04:56

标签: couchbase n1ql

Couchbase 5.5 N1Ql

我在沙箱垫数据库中有15万个文档,文档名称的格式如下:

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倍?下划线不好吗?还有其他我应该逃脱的角色以提高性能

1 个答案:

答案 0 :(得分:3)

_是通配符,用于匹配该位置的任何字符。如果要精确搜索,则需要对其进行转义。在https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/comparisonops.html

上结帐

由于您的结果相同,因此您在该位置可能没有其他字符。如果您在_处还有其他字符,结果将有所不同。

由于无法对通配符执行IndexScans,因此在首个通配符之前,IndexScan会在前缀字符串上执行。这就是没有转义字符IndexScan会产生更多结果和花费时间的原因。通过转义_,通配符从%开始。

进行解释并检查跨度是否正确并进行优化。

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