CouchDB Couchbase DB连接查询性能

ccgok5k5  于 2023-05-11  发布在  CouchDB
关注(0)|答案(1)|浏览(193)

我试图优化一个连接查询,当偏移量增加时,它会花费更多的时间。你的建议会很有帮助。

SELECT  *
FROM    document_1 AS doc_1
JOIN    document_1 AS doc_2 
ON      doc_1.id_col_11 = doc_2.id_col_21
AND     doc_1.id_col_12 = doc_2.id_col_22
WHERE   doc_1.id_col_13 = 'ABC'
AND     doc_1.id_col_14= 'XYZ'
ORDER BY doc_1.created_date, document_1.id
OFFSET 0
LIMIT 20

我创建了如下索引:

CREATE idx_1 ON document_1 (id_col_11, id_col_13, id_col_14);
CREATE idx_2 ON document_1 (id_col_21, id_col_22);

OFFSET LIMIT TIME
0      100    5.9s 
10     100    6.0s 
1000   100    5.9s 
10     1000  16.5s 
100    500   11.4s

当偏移增加时,性能下降。我正在使用Spring Data 连接到Couchbase数据库。

e5nqia27

e5nqia271#

你提到的数字并不反映任何在下降,如果抵消增加。当LIMIT增加时,它显示的是下降。这是预期的,因为文档数量和大小增加,并且需要传输到客户端和客户端需要消费。
如果可能的话,你还需要在FIRST中使用where子句过滤器,这样可以将它们推送到索引器中,尽早消除。https://www.couchbase.com/blog/ansi-join-support-n1ql/
一旦你有了ORDER BY,它就需要产生所有可能的结果(JOIN中的最后一个项目可以是顺序中的第一个)。
当OFFSET+LIMIT < 8192时,它使用堆排序,并提前丢弃条目,而不是完全排序
此处讨论偏移/限制对性能的影响https://www.couchbase.com/blog/offset-keyset-pagination-n1ql-query-couchbase/。由于JOIN,这将不适用
看看你是否可以使用左侧作为子查询与Couchbase排序记录与键集分页-失踪的记录,并得到它的工作

相关问题