先审计
Blog.objects.filter(title='My Blog').explain()
返回字符串来说明数据库中如何执行该查询
使用三方库 django-debug-toolbar
通用优化方式
添加索引 在Meta.indexes 或 Field.db_index
合适的字段类型
理解查询
各司其职
数据库过滤数据,记得使用F表达式来在本行过滤出来
使用数据库的聚合操作来进行统计
一次取完
select_related prefetch_related
prefetch_related_objects
只取需要的数据
values values_list 只取某些字段
如果还是想要完整的object,可使用defer指定某些不要的字段,也可使用only指出只需要的字段
例如,取得文章,只需要文章标题,则可在defer中指出文章内容字段,这样节省取出和转换时间
使用count和exists 但如果之后要用内容就不需要这一步了
使用update
如果只需要外键的id,只获取entry.blog.id避免join
不需要不排序
批量插入
Entry.objects.bulk_create([
Entry(headline='This is a test'),
Entry(headline='This is only a test'),
])
my_band.members.add(my_friend)
# 多对多关系字段的
网友评论