• 子查询
Manticore 支持通过 SQL 进行 SELECT
子查询,格式如下:
外部查询只允许 ORDER BY
和 LIMIT
子句。子查询目前有两个主要的应用场景:
当您有一个查询中包含两个排名 UDF,一个非常快,另一个较慢,并且执行全文搜索时匹配到大量结果集。没有子查询时,查询可能如下:
使用子查询后,可以重写为:
在初始查询中,
slow_rank()
UDF 需要为整个匹配结果集计算。而通过SELECT
子查询,fast_rank()
仅为整个匹配集计算,而slow_rank()
只为限制后的部分数据集计算。第二种情况适用于从分布式表返回的大型结果集。
对于这样的查询:
如果您有 20 个节点,每个节点可以返回最多 50K 条记录,结果是 20 x 50K = 1M 条记录。然而,由于主节点只返回其中的 50K 条(在 1M 条记录中选取),因此让节点只发送前 10K 条记录可能就足够了。使用子查询,您可以将查询重写为:
在这种情况下,节点只接收到内部查询并执行它。这意味着主节点将只接收到 20x10K=200K 条记录。主节点会将接收到的所有记录按外部查询条件重新排序,并返回最佳的 50K 条记录。子查询有助于减少主节点和其他节点之间的数据传输量,并减少主节点的计算时间(因为它只需处理 200K 条记录,而非 1M 条记录)。
最后更新于