我有一张约有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
但是我觉得这会执行很多阅读。有没有办法进一步优化它?
我尝试在代码上使用多索引,并且在没有索引的情况下进行常规排序。这似乎做了更少的读取,但速度要慢得多。