使用filter和orderBy优化查询

时间:2016-11-07 10:47:53

标签: rethinkdb rethinkdb-javascript reql

我有一张约有20k记录的表Items。我需要能够过滤多个标签(或)并维护项目的顺序,按sticky排序然后创建日期。

例如,我可以获取标记有tagA,tagB或tagC等的项目。如果项目是sticky(bool),则先对其进行排序,然后按创建日期对其余项目进行排序。 / p>

目前我的查询如下:

Item.orderBy({ index: r.desc('priority') }) // priority = doc => [doc('sticky'), doc('created').toEpochTime()]
    .filter(row => r.expr(['tagA', 'tagB','tagC']).setIntersection(row('tags')).count().ne(0))
    .slice(offset, offset + limit); // 0 to 10 - pagination

但是我觉得这会执行很多阅读。有没有办法进一步优化它?

我尝试在代码上使用多索引,并且在没有索引的情况下进行常规排序。这似乎做了更少的读取,但速度要慢得多。

0 个答案:

没有答案