由于for(),Django查询速度太慢

时间:2016-01-13 17:56:38

标签: django performance sqlite database-design

假设上下文[' cat']是一个列表,它可以有多个值[' X',' Y',' Z' ]和'类别'字段也可以有多个值:[' X']或[' X,Y']。

此代码可让我获取所需的所有对象。 问题是我有400万条记录。当我在100k记录上尝试此代码时没有延迟,但有4M记录有20秒延迟。

paper_list = model1.objects.filter(reduce(operator.or_, (Q(category__icontains=x) for x in context['cat'])))

我被告知解决方案可能是在模型上使用ManyToMany关系,但即使我阅读文档ManyToMany,我也不知道如何使用。

有没有办法在没有这种结构的情况下实现这一目标?我想在MySQL上使用像LIKE表达式这样的东西,但是' icontains'我没有给我想要的东西,除非我使用for(),因为有很多记录的延迟。

如果它有任何帮助,这是我加载所有记录的模型,而且我没有更多记录:

class model1(models.Model): 
   author= models.CharField(max_length=200, blank=True)
   title= models.CharField(max_length=200, blank=True)
   sum= models.CharField(max_length=200, blank=True)
   key= models.CharField(max_length=200, blank=True)
   iso= models.CharField(max_length=200, blank=True)
   extra= models.CharField(max_length=200, blank=True)
   url= models.CharField(max_length=200, blank=True)
   category= models.CharField(db_index=True, max_length=199)

有人能指出我正确的方向吗?

0 个答案:

没有答案