[英]How could I rewrite this loop of Django queries as a more efficient SQL query?
这是在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,则它是SELECT player.* from player order by player.score desc
的SELECT player.* from player order by player.score desc
。 我不确定没有嵌套的MySQL查询是否可以实现您要做什么,从技术上讲,无论如何这将是两个查询。
如果您重新访问原始解决方案,实际上并没有那么复杂。
如果您担心性能,我建议您查看django-debug-toolbar
如果尚未安装)。 这个小程序包提供查询的时间和统计信息。 最新版本(0.8.3)还提供了一个CLI插件,该插件可向您显示使用manage.py shell
(称为debugsqlshell
)执行的查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.