用途:面向数据库操作的实践规范,覆盖迁移、查询优化、事务、连接池与数据校验,帮助在开发中保持向后兼容与可测量的性能改进。
主要能力与用法: 迁移采用仅向前、不回滚,保持向后兼容。示例:ALTER TABLE users ADD COLUMN phone VARCHAR(20); 之后回填再执行 ALTER TABLE users ALTER COLUMN phone SET NOT NULL; 大改动拆分为小步骤,过渡期用功能开关。 查询优化先看执行计划:EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123; 再按实际查询模式建索引,如 CREATE INDEX idx_orders_user_date ON orders (user_id, created_at DESC); 以及部分索引 CREATE INDEX idx_orders_pending ON orders (status) WHERE status = 'pending'; 监控未使用索引,idx_scan < 100 时移除。 防 N+1:循环中始终预加载,如 users = User.query.options(joinedload(User.posts)).all(),避免逐个查询。 事务:限定在单个业务操作内并保持简短,如 async with db.transaction(): 内创建订单与更新库存,退出时提交;外部调用(发邮件、调 API)放在事务之外,切勿在外部调用期间持有事务。 连接池:按实测峰值并发设置,如 pool_size=15、max_overflow=5、pool_timeout=30、pool_recycle=3600、pool_pre_ping=True,监控利用率并在 80% 告警。 数据校验:在边界校验,而非只依赖数据库约束,插入前校验输入、读取后校验输出以发现损坏。
适用场景:编写数据库迁移、优化查询或添加索引、处理事务与连接池配置、排查 N+1 等性能问题。
限制与反模式:避免回滚迁移、无查询模式分析的索引、循环中的 N+1、含外部调用的长事务、仅依赖数据库约束校验、未测量就使用默认连接池设置。参考资料提及 audit-logging.md(不可变审计追踪)。