计数查询在Couchbase中的工作速度太慢

时间:2018-12-20 11:30:07

标签: couchbase n1ql

我在Spring应用程序中使用了ouchbase:community-6.0.0。我喜欢数据库中的250.000条记录。我的数据库查询非常快速,无需使用COUNT查询命令。

SELECT app.*, META(app).id AS id FROM app WHERE ( deleted = FALSE OR 
deleted IS MISSING ) AND _class = 
“com.myexample.app.device.data.model.DeviceEntity” AND appId = 
“something” AND dp.language = “somelanguage” LIMIT 100 OFFSET 0

此查询非常有效且快速……响应时间小于50ms。

但是

SELECT COUNT(*) AS count FROM app WHERE ( deleted = FALSE OR deleted 
IS MISSING ) AND _class = 
“com.myexample.app.device.data.model.DeviceEntity” AND appId = 
“something”

需要1分钟。我不能减少。

索引

主要

class_appId_idxapp_class)上创建索引appId

ix1上创建索引app_classappId,如果缺少(deleted,假))

这是什么解决方案?我认为索引不起作用吗?请提供任何建议,我该如何实现?

注意:我尝试使用EE版本,没有用。

2 个答案:

答案 0 :(得分:2)

系统无法将索引与查询匹配。有时优化器并不是那么聪明。试试这个:

create index ix_test on test(_class, appId) WHERE deleted = FALSE OR deleted IS MISSING

这将使用索引。

通常来说,由于我们如何构建索引,我们在使用IS MISSING子句时会遇到麻烦。但是将该位放在索引的WHERE子句中可以使其正常工作。但这是一个非常专业的索引。考虑更改数据,以便始终显示“已删除”字段。

答案 1 :(得分:0)

使用enterprise-6.0.0可以在几毫秒内完成