祝您新年快乐!
我有一个模型,它将保存数十万条记录。该模型如下所示:
class Transaction(models.Model):
user = models.ForeignKey(User)
client = models.ForeignKey(Client)
amount = models.FloatField()
我想知道某个用户正在处理哪些客户端。为了获取唯一的客户端ID,我可以仅使用Django ORM:
Transaction.objects.filter(user=the_user).distinct('client_id').values_list('client_id', flat=True)
或者执行以下操作:
set(Transaction.objects.filter(user=the_user).values_list('client_id', flat=True))
两种方法都会产生相同的结果。但是在大量记录的情况下,哪一种方法更快?我知道distinct
在数据库中是一个相对较慢的操作,但它与Python的set()
相比如何呢?
最后,如果涉及到数据库,我的选择是MySql和PostgreSql用于生产环境。这两种方法在这种特定操作中是否有任何区别?
.distinct
依赖于RDBMS的实现,这可能比Python的set
更快地实现唯一性。一个更好的问题是:“我使用timeit测量了时间,并得到了以下结果:blah、bleh、blih。为什么在我看到bluh和bloh时,blah比bleh更快?”作为一个模板示例。 - mmgp