N1QL 查询没有使用预期的索引
N1QL query does not use the expected index
我正在尝试创建一个将使用特定索引的 couchbase N1QL 查询。
这是我的索引:
CREATE INDEX index_progressTest ON testbucket(payload.type, payload.display, payload.status, meta(testbucket).id) where payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS" using GSI;
这是我的查询(我使用解释来查看它将使用哪个索引):
EXPLAIN SELECT meta(jmbucket).id FROM testbucket WHERE payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS";
但是查询好像不会用到我的索引。
如果我从索引和查询中删除 "WHERE" 子句的最后一部分,那么一切正常。
我应该怎么做才能解决它?
谢谢!
这已在 Couchbase 4.5 中修复。
如果您想使用 4.1,请将其从您的索引中删除:
AND payload.status != "IN_PROGRESS"
请记住,Couchbase 区分大小写。确保在创建索引脚本中指定的列与文档中元素的大小写相匹配。我发现这很困难。 #lessonlearned
我正在尝试创建一个将使用特定索引的 couchbase N1QL 查询。 这是我的索引:
CREATE INDEX index_progressTest ON testbucket(payload.type, payload.display, payload.status, meta(testbucket).id) where payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS" using GSI;
这是我的查询(我使用解释来查看它将使用哪个索引):
EXPLAIN SELECT meta(jmbucket).id FROM testbucket WHERE payload.type = "Test" AND payload.display = true AND payload.status != "IN_PROGRESS";
但是查询好像不会用到我的索引。 如果我从索引和查询中删除 "WHERE" 子句的最后一部分,那么一切正常。
我应该怎么做才能解决它?
谢谢!
这已在 Couchbase 4.5 中修复。
如果您想使用 4.1,请将其从您的索引中删除:
AND payload.status != "IN_PROGRESS"
请记住,Couchbase 区分大小写。确保在创建索引脚本中指定的列与文档中元素的大小写相匹配。我发现这很困难。 #lessonlearned