HOME / NOTES / Django ORM 查询优化技巧
📝

> Django ORM 查询优化技巧

总结 Django ORM 中的查询优化方法,提高应用性能。

常见性能问题

  • N+1 查询问题
  • 不必要的数据库访问
  • 缺乏适当的索引

优化技巧

使用 select_related

# 优化前:会产生 N+1 查询
for post in BlogPost.objects.all():
    print(post.author.name)  # 每次都查询数据库

# 优化后:一次查询获取所有相关数据
for post in BlogPost.objects.select_related('author'):
    print(post.author.name)  # 不会产生额外查询

使用 prefetch_related

# 优化前
for post in BlogPost.objects.all():
    for tag in post.tags.all():  # N+1 查询
        print(tag.name)

# 优化后
for post in BlogPost.objects.prefetch_related('tags'):
    for tag in post.tags.all():  # 只需要两次查询
        print(tag.name)

使用 only() 和 defer()

# 只获取需要的字段
BlogPost.objects.only('title', 'created_at')

# 排除不需要的字段
BlogPost.objects.defer('content')