我在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_idx
(app
,_class
)上创建索引appId
在ix1
上创建索引app
(_class
,appId
,如果缺少(deleted
,假))
这是什么解决方案?我认为索引不起作用吗?请提供任何建议,我该如何实现?
注意:我尝试使用EE版本,没有用。
答案 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可以在几毫秒内完成