我有一个django模型,其中包含具有以下属性的字段:
因此,90%的时间我过滤掉相同的10%的对象(+无论查询在此基本过滤之上做什么,都要让我显示10-100个对象)。在django这样做表现最好的方法是什么? (优化一个查询可能不值得付出努力,但不知何故,始终以相同的方式过滤数据似乎很浪费......)
DB是带有InnoDB表的MySql。我打算用虚拟数据进行测试来比较实现,但我希望得到任何反馈和相关信息的链接。查看代码为每个对象添加了依赖于用户/配置文件的内容(即用户可能给出的评级),所以我不确定我可以缓存多少。
答案 0 :(得分:0)
我认为在缓慢之前你不应该优化任何东西。对于这个大小的数据,我将尝试使用filter + index字段。我不知道你每秒有多少请求。 如果它不够快,使用单独表格的想法看起来合理。 您也可以尝试使用一种缓存,按键(A,B,C,D)分割数据。 但我的建议是使用简单的解决方案,直到它不被接受为止。
答案 1 :(得分:0)
这个问题有两个部分:在效率方面哪些更好,以及如何编写代码。
就效率而言,除了确保数据库索引包含您要过滤的字段之外,没有必要做任何事情。您可能需要手动执行至少其中一些操作:使用类似django-debug-toolbar的内容来显示查询,并创建这些查询所需的复合索引。
对于代码,最好的办法是使用仅过滤A对象的方法创建custom manager:
class MyManager(models.Manager):
def only_as(self):
return self.filter(myfield='A')
...
MyModel.objects.only_as().filter(whatever=whatever)