Django 每个视图的最大数据库查询数

Django 每个视图的最大数据库查询数,django,database,django-views,django-queryset,django-orm,Django,Database,Django Views,Django Queryset,Django Orm,我目前正在开发一个视图,其中包含多个数据库查询(目前为10个,但最终很可能是50个或更多)->我的目标是构建一个html页面,其中包含一个大表,用于每月报告,其中包含来自数据库的各种数据(类似于仪表板) 我的问题1:我在一个视图中放置50个或更多查询的方法是否合理,还是会使页面加载时间非常缓慢。如果不明智,那么最好的做法是使用来自不同来源的大量数据构建一个视图(例如,只构建几个大型查询,以某种方式将多个较小的查询链接在一起(以减少查询数据库的频率),然后通过python将查询集中的数据分离、切片

我目前正在开发一个视图,其中包含多个数据库查询(目前为10个,但最终很可能是50个或更多)->我的目标是构建一个html页面,其中包含一个大表,用于每月报告,其中包含来自数据库的各种数据(类似于仪表板)

我的问题1:我在一个视图中放置50个或更多查询的方法是否合理,还是会使页面加载时间非常缓慢。如果不明智,那么最好的做法是使用来自不同来源的大量数据构建一个视图(例如,只构建几个大型查询,以某种方式将多个较小的查询链接在一起(以减少查询数据库的频率),然后通过python将查询集中的数据分离、切片和分块

我的问题2:我这样设计我的查询在效率上有什么不同吗

    data = Testdata3.objects.all()
    data1 = data.filter(key__regex=r'abc123$').order_by('date').values('date','performance')
    data2 = data.filter(key__regex=r'def456$').order_by('date').values('date','performance')
    data3 = data.filter(key__regex=r'ghi789').order_by('date').values('date','performance')
    data1 = Testdata3.objects.filter(key__regex=r'abc123$').order_by('date').values('date','performance')
    data2 = Testdata3.objects.filter(key__regex=r'def456$').order_by('date').values('date','performance')
    data3 = Testdata3.objects.filter(key__regex=r'ghi789').order_by('date').values('date','performance')
或者像这样:

    data = Testdata3.objects.all()
    data1 = data.filter(key__regex=r'abc123$').order_by('date').values('date','performance')
    data2 = data.filter(key__regex=r'def456$').order_by('date').values('date','performance')
    data3 = data.filter(key__regex=r'ghi789').order_by('date').values('date','performance')
    data1 = Testdata3.objects.filter(key__regex=r'abc123$').order_by('date').values('date','performance')
    data2 = Testdata3.objects.filter(key__regex=r'def456$').order_by('date').values('date','performance')
    data3 = Testdata3.objects.filter(key__regex=r'ghi789').order_by('date').values('date','performance')

我的假设是,第一种方法效率更高,因为我只点击了一次数据库,然后从数据对象而不是数据库中筛选出来。

你的假设是错误的。两段代码都点击了数据库三次。谢谢!那么你知道设计具有如此多查询的视图的最佳实践吗就这样吧?50个查询听起来并不离谱。但是如果你真的担心,你可以将这三个查询组合成一个带有Q的查询,或者甚至是带有
|
的单个正则表达式,然后在结果中包含键,并用Python中的键对它们进行过滤/排序。