Django 查询性能过滤与外键集查找

Nic*_*ick 3 python mysql django performance

我想知道在 Django 中哪个查询更快。我有一个位置模型和一个用户模型。用户是位置的外键,因此每个位置都可以有一个“locationuser_set”属性。

如果我有数千个用户,哪个更快?

查询 1:

location = Location.objects.get(id=<id>)
users = location.user_set.all()
Run Code Online (Sandbox Code Playgroud)

查询 2:

users = User.objects.filter(location_id=<id>)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

查询 2 完全等同于查询 1 的第二行。但由于查询 1 还包括第一行,该行执行单独的位置查找,因此速度必然较慢。

如果您不需要实际的位置对象,那么 2 绝对是要走的路。