每行中的空字段过多是否会影响PostgreSQL中的搜索性能?
我正在使用PostgreSQL和Django作为我的数据库 下面给出的是我的数据库模型每行中的空字段过多是否会影响PostgreSQL中的搜索性能?,sql,django,database,postgresql,database-design,Sql,Django,Database,Postgresql,Database Design,我正在使用PostgreSQL和Django作为我的数据库 下面给出的是我的数据库模型 class Users(model.Model): email = model.CharField(max_length=50, default="") password = model.CharField(max_length=40, default="") source = model.CharField(default='unknown', max_length=150)
class Users(model.Model):
email = model.CharField(max_length=50, default="")
password = model.CharField(max_length=40, default="")
source = model.CharField(default='unknown', max_length=150)
domain = model.CharField(max_length=50, default="")
before_at = model.CharField(max_length=255, default="")
username = model.CharField(max_length=150, default="")
hash = model.CharField(max_length=255, default="")
ipaddress = model.CharField(max_length=50, default="")
phonenumber = model.CharField(max_length=100, default="")
class Meta:
constraints = [
models.UniqueConstraint(fields=['email', 'password', 'source'], name='uniqueness constraints')
]
def __str__(self):
return self.email
最重要的是,大多数行将有电子邮件、密码、域字段,但其余的将保持为空。
类似地,有些将具有用户名、密码和源,而另一些则为空。
我想做的是,每个人都可以根据不同的字段(如电子邮件、密码、域、用户名、哈希、ipaddress)从users表中搜索。在这张表中,将有数十亿个数据。
因此,最好的做法是,即使行中有很多空字段也可以,或者它会影响性能。例如,总共有10亿条记录,但其中5亿条记录的ipaddress字段为空/空,5亿条记录的ipaddress字段中有数据,如果我在表中基于ipaddress字段进行搜索,这是否会影响搜索性能
有没有更好的方法来做到这一点,比如拆分表格或其他事情
感谢表定义后面的列需要更长的时间才能访问。对于9列来说,这不太可能有意义,但对于200列来说可能有意义 跳过一个空列以到达所需的列只需花费很少的时间,但跳过一个已占用的列也会花费很少的时间 可能最有可能为NULL的列最不可能被搜索,因此在表定义的末尾声明它们是有意义的
这是过早的优化。如果你真的很担心,那就设计一个数据生成器来生成真实的数据,并根据真实的数据对真实的查询进行实际测试。阅读本文。应该能让你很好的理解。这能回答你的问题吗?