我试图从我的查询集中采样一些记录以提高性能,例如:
from random import sample
from my_app import MyModel
my_models = MyModel.objects.all()
# sample only a few of records for performance
my_models_sample = sample(my_models, 5)
for model in my_models_sample:
model.some_expensive_calculation
Run Code Online (Sandbox Code Playgroud)
但我觉得它只会在执行时间方面变得更糟。
random.sample()幕后的实际工作如何?它会不会对 django 查询集造成相当大的性能负担?
由于random.sample()将强制评估 queryset my_models,程序的执行时间将在很大程度上取决于MyModel数据库中的对象总数。
为了提高性能,并避免加载整个查询集到内存中,你可以描述最终实现自己的采样功能在这里一起.iterator()的方法。
或者,您也可以依靠数据库服务器通过order_by('?')以下方式为您进行采样:
MyModel.objects.order_by('?')[:5]
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我不推荐后者,因为查询可能既昂贵又缓慢,具体取决于您使用的数据库后端。(特别是对于 MySQL)
| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |