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