SQLAlchemy-Marshmallow 查询和序列化到 JSON 很慢

SQLAlchemy-Marshmallow slow to query and serialize to JSON

我对此有些陌生,所以如果有人能帮助我,那就太棒了。

所以我在 SQLAlchemy 中为我正在开发的 Flask 应用程序设置了一些模型。在构建应用程序时,我用一些虚假数据填充了数据库(目前为 SQLite),我对我的一个调用速度如此之慢感到有点惊讶。

我在数据库中有一个 table 叫做菜单。菜单有一个子项 sections,它有一个子项 items。像这样:

我查询的对象是,1个Menu,里面有4个Section,每个Section有10个item。

在我的 Flask 路由中,我使用 Menu.query.get(id) 查询数据库并使用棉花糖将其序列化为 JSON。

在我的本地机器上 return 整个过程需要 250 毫秒。

所以我的问题 is/are: 我担心 250 毫秒是不是很愚蠢? 缓慢的罪魁祸首是什么? - 糟糕的模式设计? - SQLite / 使用 SQL Db? - 还有别的吗?

如有任何帮助,我们将不胜感激。

另外。我最初有 2 个更深的级别(项目有选项有选项),但它需要整整一秒才能完成,所以我将它们移动到一个单独的端点,以便用户请求特定项目时使用。

鉴于一切都是本地的,我同意 250 毫秒过长。我预计缓慢的原因是正在执行多个 SQL 查询以构建 JSON。

在 SQLAlchemy 配置上设置 SQLALCHEMY_ECHO = True 将向您显示正在生成的 SQL 查询并确认这一点。

您还没有提供您的数据库模型,但您可能会发现您的关系正在延迟加载,因此正在为树中的每个对象创建一个新的 SQL 查询。您可以在 SQLAlchemy 文档的 Relationship Loading Techniques 部分找到更多信息。

在子关系上设置 lazy='joined'(即菜单 -> 部分和部分 -> 项目)将导致使用 JOIN 而不是默认 SELECT 急切加载子关系。