2016-05-10 37 views
0

我有一個查詢,我想要加入子查詢,它使用outerjoin函數調用可以正常工作,問題是發出的查詢在2-3s內運行,幾乎立即顯式指定連接方法在SQL服務器控制檯中輸入LEFT HASH JOINSQLAlchemy哈希加入

有沒有一種方法,我可以用它來迫使SQLAlchemy的發射沿着

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

的線LEFT HASH JOIN聲明?我試過在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

經過進一步閱讀,正如Ilija在他們的評論中提到的,這不是SQLAlchemy當前可能實現的功能。

但是,相同的閱讀也表明,指定SQL查詢的聯接提示通常應該只是查詢優化計劃中的最後一步 - 例如here

而不是試圖將我後來的功能修改爲SQLAlchemy,我回去重新檢查了join_conditions的內容,我在我的問題中縮寫了一下,發現通過調整連接邏輯,我可以獲得SQL Server生成更快的執行計劃。