Python 重用缓存的QuerySet以防止查询数据库
我正试图尽可能减少我应用程序中某一部分的数据库点击次数,因为它们会对性能产生相当负面的影响 我使用任何Python 重用缓存的QuerySet以防止查询数据库,python,django,python-2.7,caching,Python,Django,Python 2.7,Caching,我正试图尽可能减少我应用程序中某一部分的数据库点击次数,因为它们会对性能产生相当负面的影响 我使用任何QuerySet操作,如filter、exclude、Q对象等,对给定球员的比赛集进行各种筛选 player.game_set.filter(Q1) player.game_set.filter(Q2) player.game_set.exclude(Q3) 每次执行QuerySets集合时,数据库都会被命中 我想知道我是否能做到以下几点:只需点击数据库一次,即可获得玩家游戏的超集: play
QuerySet
操作,如filter
、exclude
、Q
对象等,对给定球员的比赛集进行各种筛选
player.game_set.filter(Q1)
player.game_set.filter(Q2)
player.game_set.exclude(Q3)
每次执行QuerySet
s集合时,数据库都会被命中
我想知道我是否能做到以下几点:只需点击数据库一次,即可获得玩家游戏的超集:
player.game_set.all()
然后筛选缓存的QuerySet
,但仍使用QuerySet
操作,如filter
、exclude
和Q
对象。这些将作用于缓存的player.game\u set.all()
,而不是每次都击中底部
可以这样做吗?不,像
.filter()
这样的方法构造一个新的查询集,查询集需要点击数据库才能得到结果。它永远不会尝试根据先前查询集的缓存结果在内存中执行等效操作。如果您发现查询速度较慢,可能是因为您没有最佳索引。请发布您的模型(以及它们的索引)否,像.filter()
这样的方法构造一个新的查询集,查询集需要点击数据库才能获得结果。它永远不会尝试根据先前查询集的缓存结果在内存中执行等效操作。如果您发现查询速度较慢,可能是因为您没有最佳索引。请发布您的模型(及其索引)