2016-05-10 11 views
0

outerjoin関数呼び出しを使用してうまく動作するサブクエリに参加するクエリがあります。問題は、発行されたクエリが2-3秒で実行されるということです。 SQLサーバーコンソールにLEFT HASH JOINと入力します。SQLAlchemyハッシュ結合

私は

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

の線に沿ってLEFT HASH JOIN声明を発するようにSQLAlchemyのを強制するために使用できる方法はありますか?私はStackOverflowとインターネットのどこかで検索しようとしましたが、関連するものは何も見つかりませんでした。結果に何らかの影響がある場合は、Microsoft SQL Serverを使用しています。

ORMを使用することの簡潔さのためにパフォーマンスを犠牲にしている場合は、トレードオフができますが、明らかに私は好きではありません。

+0

ソースを読むことから、あなたが望むものは現時点では不可能であるように見えます。 ['Query._join'](https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/orm/query.py#L1984)、[' Join'](https:///github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/sql/selectable.py#L679)とコンパイラの['visit_join'](https://github.com/zzzeek/sqlalchemy/blob/master/lib /sqlalchemy/sql/compiler.py#L1849)。それらを拡張することは、あまりにも難しい作業のように思えます。 –

答えて

0

さらに読むと、彼らのコメントに記載されているように、これは現在SQLAlchemy内で可能なことではありません。

しかし、同じ読書では、SQL照会での結合ヒントの指定は、通常は照会最適化計画の最後のステップでなければならないことが示されています(例:here)。

私はSQLAlchemyの機能をサルパッチするのではなく、join_conditionsの内容を再調査しました。私の質問では省略していましたが、結合ロジックを調整してSQL Serverはるかに高速な実行計画を生成します。

関連する問題