我们有一个Couchbase
服务器版本Community Edition 5.1.1 build 5723
在我们的Cars
存储桶中,有Car Make
和它制造的Cars
。
两者之间的联系是Id
的{{1}},我们将其保存为Car文档中的另一个字段(例如MySQL表中的外键)。
该存储桶只有330,000个文档。
查询要花很多时间-数十秒的查询非常简单,例如
Car Make
我们以两种方式执行查询:
我们认为该问题是存储桶中缺少索引。
所以我们添加了一个索引:
select * from cars where model="Camry" <-- we expect to have about 50,000 results for that
我们可以在运行时看到该索引
CREATE INDEX cars_idx ON cars(makeName, modelName, makeId, _class) USING GSI;
我们在这里缺少什么?在NoSQL DB中进行此类查询的时间是否合理?
答案 0 :(得分:4)
尝试
CREATE INDEX model_idx ON cars(model);
您的索引不包括模型字段。
并且您应该为spring数据“ base_base”属性建立索引
CREATE INDEX `type_idx` ON `cars`(`_class`)
答案 1 :(得分:2)
所以,这就是我们解决问题的方式:
do{ Pageable pageable = PageRequest.of(pageNumber, SLICE_SIZE, Sort.by("id")); Slice slice carsRepository.findAllByModelName("Camry", pageable); List cars = slice.getContent(); } while (slice.hasNext());