这是一个问题,我想要一个有效的AQL命令。
ArangoDB 3.4.0-RC.1,RocksDB存储引擎
Collection Gigs有33,000条记录
我在_key上有一个主索引
我想做的是以下内容:
我想从集合中提取25条随机记录。
我看过以下可以做的事情:
FOR g IN gigs
SORT RAND()
LIMIT 25
RETURN g
这在我的机器上大约需要2.8秒。
RETURN NTH(gigs, 30)
其中30将被随机数替换。
它还需要3秒钟。
我不知道是否可能,但我可以告诉它从主索引中选出第n条记录(_key是我真正需要的)吗?
关于如何获得更好结果的任何想法?
这里的挑战是,您需要将索引与随机性相结合,因为rocksdb没有快速的方法让any()
在集合中为您提供随机文档。
一个好的方法是将随机值与范围比较和LIMIT
语句组合:
FOR g IN gigs
FILTER g.someIndexedNumber > @externalyGeneratedRandomNumber
LIMIT 25
RETURN g
您应该使用explain()
来验证您的查询实际上是否能够使用索引。