我正在学习Django,我对查询集性能有疑问。 是这样的代码:
Model.objects.filter('premmium' = True)[:20]
它是否等同于SQL查询:
SELECT * FROM `Model` WHERE `premmium` = True LIMIT 20;
或者只是一个:
SELECT * FROM `Model` WHERE `premmium` = True;
然后只从所有人那里拿走了20个元素?
答案 0 :(得分:1)
请参阅https://docs.djangoproject.com/en/dev/topics/db/queries/#limiting-querysets
相当于
SELECT * FROM `Model` WHERE `premmium` = True LIMIT 20;
但是,值得注意的是,使用这样的切片并不总是最有效的查询方式,因为结果的缓存方式(参见here)。通常,如果数据集不是很大,那么在python中进行切片会更有效:
list(Model.objects.filter('premmium' = True))[:20]