gpt4 book ai didi

sqlite - SQLAlchemy + SQLite左联接性能问题

转载 作者:行者123 更新时间:2023-12-03 15:54:08 26 4
gpt4 key购买 nike

我有两个相同的查询,除了from子句中左连接的位置。一个运行非常慢,另一个运行非常快(为简明起见缩写):

--SLOW
SELECT DISTINCT b.id
FROM a LEFT OUTER JOIN b ON a.id = b.id
JOIN c ON a.id = c.a_id
JOIN d ON c.id = d.c_id
WHERE d.value = 9;

--FAST
SELECT DISTINCT b.id
FROM a JOIN c ON a.id = c.a_id
JOIN d ON c.id = d.c_id
LEFT OUTER JOIN b ON a.id = b.id
WHERE d.value = 9;


我的问题是,使用SQLAlchemy,我似乎只能创建慢版本的查询。具体来说,我正在使用表继承,并尝试运行以下代码:

return session.query(A).\
with_polymorphic(B).\
join(C).\
join(D).\
filter(D.value_id == 9).\
distinct()


换句话说,我无法控制创建LEFT JOIN的位置。

我该如何使SQLite和/或SQLAlchemy更智能?

最佳答案

我不知道强制SA更改查询的方法。但我想确定为什么查询的执行计划有所不同。我假设如果连接列上有索引,则查询中JOINs的顺序应该无关紧要。

您可以使用EXPLAIN语句检查执行计划。尽管您需要熟悉The Virtual Database Engine of SQLite。仍然有可能您立即发现两个执行计划之间的差异,并且能够提高数据库性能,而不用欺骗SA。
尝试从查询中也删除CD,以便更轻松地比较执行计划。

关于sqlite - SQLAlchemy + SQLite左联接性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089172/

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