关于 django-db-side-computation
django-db-side-computation 是面向 Django 开发者的技能,用于将适合的 Python 计算移至数据库执行。它涵盖 ORM 表达式选择、查询计划验证及是否存储结果的判断,并提醒测量性能和核对正确性。
主要功能
- 01识别可下推的 Python 计算
- 02选择 Django ORM 表达式
- 03检查 SQL 与查询计划
- 04评估索引和结果存储方式
- 05对比计算正确性与耗时
适用场景
- 01将相关对象计数改为数据库聚合
- 02查询每条记录关联对象的最新值
- 03评估窗口函数排名查询
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-db-side-computation安装后在 Claude Code 中输入/django-db-side-computation确认已加载。
附带文件references/aggregation-patterns.md
详细介绍
Django 数据库端计算
当 Django 将行提取到 Python 中进行计算,而数据库可以更高效或更一致地完成这些计算时,使用此技能。
工作流
-
确定 Python 中的计算内容。
- 计数、求和、最小值/最大值、布尔值、最新的关联行、排名、反规范化总计,或逐行派生字段。
- 确认计算结果是否必须精确、实时且在事务中保持一致。
-
选择 SQL 表达式级别。
- 对于简单比较和更新,使用
filter()、exclude()和F()。 - 对于逐对象计数和总计,使用
annotate()和聚合函数。 - 对于条件计数和求和,使用筛选聚合。
- 对于是/否形式的关联行检查,使用
Exists()。 - 对于最新的关联值或标量关联值,使用带有
OuterRef()的Subquery()。 - 对于排名和累积计算,使用
Window()。 - 如果数据库支持,则对确定性的同行计算列使用
GeneratedField。
- 对于简单比较和更新,使用
-
验证查询结构。
- 检查生成的 SQL 或
QuerySet.explain()。 - 必要时,在分组前清除非预期的排序。
- 确认索引能够支持联接、筛选和排序。
- 检查生成的 SQL 或
-
决定是否应存储结果。
- 对于请求时计算的值,使用注解。
- 对于确定性的同行计算值,使用生成列。
- 如果跨行聚合查询开销过高且允许数据过时,则使用物化视图或反规范化表。
有关 Django 表达式示例,请参阅 aggregation-patterns.md。
安全提示
- 数据库计算不一定更快;复杂查询可能会使数据库过载,或阻塞 OLTP 工作。
- 生成列有数据库特定的限制;PostgreSQL 仅支持持久化生成列。
- 如果组合不当,子查询和注解可能会重复执行。请查看执行计划。
验证
先用有代表性的数据,将结果与旧的 Python 计算进行正确性比较,然后测量 SQL 执行时间和总响应时间。
评论
支持 Markdown