我对此有些新意,所以如果有人可以帮助我,那就太棒了 .
所以我在SQLAlchemy中为我正在研究的Flask应用程序设置了一些模型 . 在我构建应用程序的时候,我填充了db(当前是SQLite)的一些假数据,我很惊讶我的一个调用速度有多慢 .
我在DB中有一个名为Menu的表 . 菜单上有一个孩子,各个部分,里面有一个孩子,物品 . 像这样:
-
菜单
-
章节
-
项目
我正在查询的对象是1个菜单,它有4个部分,每个部分有10个项目 .
在我的Flask路线中,我使用Menu.query.get(id)查询数据库,并使用marshmallow将其序列化为JSON .
整件事需要花费250毫秒才能在我的本地机器上返回 .
所以我的问题是:我在担心250毫秒时我是傻瓜吗?缓慢的罪魁祸首是什么? - 糟糕的架构设计? - SQLite /使用SQL Db? - 还有别的吗?
任何帮助将不胜感激 .
另外 . 我最初还有2个更深层次(项目有选项可供选择),但它需要大约一整秒才能完成,所以当用户请求特定项目时,我将它们移动到一个单独的 endpoints .
1 回答
鉴于一切都是本地的,我同意250毫秒是过分的 . 我希望缓慢的原因是正在执行多个SQL查询以构建JSON .
在SQLAlchemy配置上设置
SQLALCHEMY_ECHO = True
将显示正在生成的SQL查询并确认 .您尚未提供数据库模型,但您可能会发现您的关系正在延迟加载,因此正在为树中的每个对象创建一个新的SQL查询 . 您可以在SQLAlchemy文档的Relationship Loading Techniques部分中找到更多信息 .
在子关系上设置
lazy='joined'
(即Menu - > Section和Section - > Items)将导致使用JOIN而不是默认SELECT急切加载子关系 .