标题可能不是很清楚所以让我解释一下。
我想在2个表*,Session
和SessionAction
上处理进程间连接(nodeJs)。 (1-N)
由于这些表相当大(两百万条记录),我的想法是根据orderBy sessionId
(它们共享的)获取切片,并且按批次锁定两个表。
table('x').orderBy({index:"sessionId"}.filter(row.sessionId > start && row.sessionId < y)
似乎即使我实际上是对具有索引的属性sessionId
进行过滤,查询规划器也不够聪明,看不到这一点,并且每个查询都会执行完整的表扫描,以便在过滤之前执行orderby之后(或者看起来如此)
当然,这非常浪费,但我没有看到另一种选择。例如:
slice-enumeration
(即:xth直到第y条记录)不会在2个表之间相加。 问题:
*)使用Rethink Reql只能使用Rethink Reql。
答案 0 :(得分:0)
filter
永远不会在RethinkDB中编入索引。 (通常,如果您将index
作为其可选参数之一传递,则特定命令将仅使用辅助索引。)您可以像这样编写该查询以避免扫描整个表:
r.table('x').orderBy({index: 'sessionID'}).between(start, y, {index: 'sessionId'})