【问题标题】:SQLAlchemy Hash JoinSQLAlchemy 哈希联接
【发布时间】:2016-09-05 09:40:42
【问题描述】:

我有一个查询,我想加入一个子查询,使用outerjoin 函数调用可以正常工作,问题是发出的查询在 2-3 秒内运行,而当显式指定连接方法时几乎立即运行LEFT HASH JOIN 在 SQL Server 控制台中。

有没有一种方法可以强制 SQLAlchemy 发出 LEFT HASH JOIN 语句,类似于

query = query.outerjoin(sub_query, join_conditions, method='hash')

?我试过在 StackOverflow 和互联网上的其他地方搜索,但找不到任何相关的东西。如果这对结果有任何影响,我正在使用 Microsoft SQL Server。

如果这是为了使用 ORM 的简单性而牺牲性能的情况,那么这是我很乐意做出的权衡,但显然我不想这样做!

【问题讨论】:

  • 从阅读源代码看来,目前您所希望的似乎是不可能的。看看Query._joinJoin 和编译器的visit_join。扩展这些似乎也是一项艰巨的任务。

标签: python sql sql-server join sqlalchemy


【解决方案1】:

进一步阅读后,正如 Ilija 在他们的评论中提到的,这在 SQLAlchemy 中目前是不可能的。

然而,同样的阅读也表明,在 SQL 查询中指定连接提示通常应该只是查询优化计划中的最后一步 - 例如here

我没有尝试将我想要的功能修补到 SQLAlchemy 中,而是返回并重新检查了我在问题中缩写的 join_conditions 的内容,发现通过调整连接逻辑,我可以获得 SQL服务器生成更快的执行计划。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2019-08-26
    • 2014-06-26
    • 2011-03-04
    • 2021-01-01
    • 2014-01-30
    相关资源
    最近更新 更多