如何将Django查询的循环重写为更高效的SQL查询?
这是在如何将Django查询的循环重写为更高效的SQL查询?,sql,mysql,django,Sql,Mysql,Django,这是在PlayerDjango模型上更新非规范化字段的低效方法。该字段基本上存储了玩家在排行榜上的位置,这是我们用于向给定玩家显示“附近”玩家的系统的要求 for position, player in enumerate(Player.objects.order_by('-score')): player.position = position + 1 player.save() 有没有办法在一个SQL查询中执行此更新?我们使用的数据库后端是MySQL 谢谢你的时间 如果你想
Player
Django模型上更新非规范化字段的低效方法。该字段基本上存储了玩家在排行榜上的位置,这是我们用于向给定玩家显示“附近”玩家的系统的要求
for position, player in enumerate(Player.objects.order_by('-score')):
player.position = position + 1
player.save()
有没有办法在一个SQL查询中执行此更新?我们使用的数据库后端是MySQL
谢谢你的时间 如果你想到
Player.objects.order_by('-score')
背后的SQL,那就是从Player order by Player.score desc中选择Player.*。我不确定如果没有一个嵌套的MySQL查询,您想要做什么是可能的,从技术上讲,这将是两个查询
如果您重新审视原始解决方案,它实际上并没有那么复杂
如果性能是你关心的问题,我建议你检查一下,如果你还没有。这个小软件包提供查询的计时和统计信息。最新版本(0.8.3)还提供了一个CLI插件,显示使用manage.py shell
(称为debugsqlshell
)执行的查询 如果你想到Player.objects.order_by('-score')
背后的SQL,那就是从Player order by Player.score desc中选择Player.*。我不确定如果没有一个嵌套的MySQL查询,您想要做什么是可能的,从技术上讲,这将是两个查询
如果您重新审视原始解决方案,它实际上并没有那么复杂
如果性能是你关心的问题,我建议你检查一下,如果你还没有。这个小软件包提供查询的计时和统计信息。最新版本(0.8.3)还提供了一个CLI插件,显示使用manage.py shell
(称为debugsqlshell
)执行的查询