gpt4 book ai didi

mongodb - 为什么 Drill join 查询没有完全针对 Mongodb 进行优化?

转载 作者:可可西里 更新时间:2023-11-01 09:14:04 49 4
gpt4 key购买 nike

我正在研究概念证明,以优化通过钻取执行的连接查询的性能。底层存储是基于 NO-SQL 的数据库——Mongo DB。返回连接查询结果所需的时间为 46 秒。进一步分析,根据查询的物理计划,观察到左侧(150 万条记录)和右侧表(130 万条)都被完全扫描,分别需要 24 秒和 20 秒。

这里是查询:

select ta.[SOME_COLUMN]  
from mongo.Test.TABLEA ta
INNER JOIN mongo.Test.TABLEB ta ON ta.Id = tb.Id and ta.Id ='123'
  • A表记录:150万

  • B表记录:130万

过滤条件:id在两个表中都是索引字段(升序)

钻取计划显示正在执行哈希连接:

enter image description here

  1. 为什么即使为其中一个表提供了索引列的过滤条件,钻取还是将所有记录提取到内存中?在 mongo 级别,我观察到执行了集合扫描而不是索引扫描,这背后的原因可能是什么? (假设我的连接和过滤条件应用于索引列)
  2. 如果 Drill 计划器/优化器足够智能,那么也可以根据连接条件在第二个表上过滤记录(以减少数据集,从而缩短执行时间)。MongoDB 存储插件不是吗完全优化是什么原因造成的?

最佳答案

Drill 的 MongoDB 存储插件不支持下推连接。它仅支持下推过滤器。

存储插件负责与 Drill 支持的数据源通信。

如果您愿意,您必须为下推连接提供您自己的优化规则。这将需要 Apache Calcite 经验并编写一个新的存储插件来提供这些规则。

我不知道是否有其他方法可以贡献新规则,除非有一个自定义插件。该插件不应该处理 MongoDB,它只需要提供必要的规则。

关于mongodb - 为什么 Drill join 查询没有完全针对 Mongodb 进行优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418354/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com