Django“的低查询速度;检查OneToOneField是否为None“;

Django“的低查询速度;检查OneToOneField是否为None“;,django,django-models,Django,Django Models,我的模型是这样的: class ArticleText(models.Model): article = models.OneToOneField(Article, on_delete=models.CASCADE, related_name="article_text") text = models.TextField() indexed_by_es = models.BooleanField(default=False, db_index=True) inde

我的模型是这样的:

class ArticleText(models.Model):
    article = models.OneToOneField(Article, on_delete=models.CASCADE, related_name="article_text")
    text = models.TextField()
    indexed_by_es = models.BooleanField(default=False, db_index=True)
    indexed_by_solr = models.BooleanField(default=False, db_index=True)
Article
是一个原始模型,我想使用
ArticleText
对其进行扩展

耗时的代码是:

articles = Article.objects.filter(Q(article_text=None))[0:10]
我的数据库里大约有10000篇文章。如何加快查询速度?

已更新 谢谢@Sachin Kukreja

使用
articles=Article.objects.filter(Article\u text=None)。值('id')[0:10]
可以防止原始SQL选择太多无用的字段。它与我前面的答案相同,但方式简洁


先前的答复 感谢@Willem Van Onsem的评论,我注意到这个问题的来源:Django生成的查询选择了太多无用的字段。因此,我自己构建了一个原始查询:

articles=Article.objects.raw(“”)
从主文章中选择a.id作为
左外连接外部数据访问文章文本为b
关于a.id=b.article\u id
其中(b.id为null)或(b.indexed_by_es=false)
限制10'')


它更快。我想这可能是Django的一个bug。

如何检查它是否为
None
?如果您在Django中这样做,那么每次您都会发出请求。改为选中
article\u id
。无论如何,请提供你现在如何检查它(或者给出一些你打算做什么的背景)。对不起。。。在我完成之前,我无意中发布了这个问题。。。稍后我将重新发布它。这会生成什么查询?你能打印str(Article.objects.filter(Q(Article\u text=None))[0:10].query)的结果吗?。它生成这样的结果:
选择main\u Article.id,main\u Article.section\id,main\u Article.title,main\u Article.publish\u time,main\u Article.image1\url,main\u Article.image2\url,main\u Article.image3\url,main\u article.content来自main\u article LEFT外部连接外部\u data\u access\u articletext ON(main\u article.id=外部\u data\u access\u articletext.article\u id),其中外部\u data\u access\u articletext.id为空限制10
。(
main
external\u data\u access
都是Django应用程序)似乎外部连接是原因……您可以在筛选查询中链接
.values('id')
方法调用。