美文网首页
Django的ORM对null的处理

Django的ORM对null的处理

作者: wu_sphinx | 来源:发表于2015-09-01 22:28 被阅读2988次

Django的orm真的很好用,现在已经用的很熟了,但是在使用的过程中也发现了一些细微的差别,今天在优化时就发现了一个小问题。
如有张表是这么设计的:

class Tree(models.Model):
    name = models.CharField(max_length=32)
    create_time = models.DateTimeField()
    parent = models.ForeignKey("self", null=True)

这是一个树形结束的表,它可以有父节点,也可以没有,如果我们想知道无节点的节点个数,可以有以下两种写法:

   1. Tree.objects.exclude(parent=None).count()
   2. Tree.objects.filter(parent__isnull=False).count()

它们所对应的SQL分别是:

(0.003) SELECT COUNT(*) FROM `tree` WHERE NOT (`tree`.`parent_id` IS NULL); args=()
(0.002) SELECT COUNT(*) FROM `tree` WHERE `tree`.`parent_id` IS NOT NULL; args=()

发现执行时间差别差不是很大,在很多应用中都会使用where column is not null查询一小部分需要操作的数据而由于is null条件无法使用索引而引起全表扫描。询问了一下DBA, null这种结构会使索引失效,以致查询缓慢。

相关文章

网友评论

      本文标题:Django的ORM对null的处理

      本文链接:https://www.haomeiwen.com/subject/exrlcttx.html