关系加载、异步访问与连接池
MySQL、SQLAlchemy 与数据库设计#Python全栈#第十四阶段#MySQL、SQLAlchemy 与数据库设计#关系加载、异步访问与连接池约 857 字 · 2 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
懒加载为什么容易形成 N+1 查询?
追问 循环展示题目分类和标签时,哪些属性访问会触发额外 SQL?如何记录数量而不是凭代码行数判断?
joinedload 与 selectinload 有什么取舍?
追问 关联结果行放大、额外往返和集合大小怎样影响选择?集合 joinedload 的结果为何需要按要求调用 unique?
显式 join 与 eager loading 的目的有什么不同?
追问 过滤或排序关联字段与填充对象关系怎样分工?为什么添加 joinedload 不代表任意关联列都自动可供 WHERE 引用?
如何分批处理大查询结果,控制内存与事务时长?
追问 yield_per、驱动缓冲、游标分页和关联加载怎样相互影响?为何分批迭代不一定等于数据库端没有缓存完整结果?
使用 AsyncEngine 与 AsyncSession 需要哪些配套条件?
追问 异步驱动、连接 URL、await 调用与生命周期怎样配合?为什么不能只把函数改成 async 就继续随意调用同步数据库操作?
异步 ORM 中的隐式 I/O 为什么可能导致 MissingGreenlet 等错误?
追问 懒加载、过期字段与响应模型属性读取怎样触发查询?预加载、显式 refresh 和 awaitable 属性各如何选择?
并发查询为何不能随意共享一个 AsyncSession?
追问 gather 中不同任务如何安排会话?多个独立会话又为什么不自动构成同一个原子事务?
连接池大小、overflow 与等待超时各控制什么?
追问 多个工作进程的连接上限怎样汇总?池等待超时、数据库连接数耗尽与 SQL 慢查询如何区分?
pool_pre_ping 与 pool_recycle 各适合处理什么连接问题?
追问 连接取出时可用与事务中途断线有何区别?为什么检查存活不能保证整个事务不会失败或自动安全重试?
如何在应用关闭、进程分叉和后台任务中正确处理连接资源?
追问 Engine.dispose、会话关闭、异步循环与独立任务资源怎样安排?为什么不应把父进程已有数据库连接直接共享给子进程?
核对资料: SQLAlchemy 关系加载、异步 ORM、连接池。