gpt4 book ai didi

python - 哪个扩展性更好? ORM 的 distinct() 或 python set()

转载 作者:行者123 更新时间:2023-11-28 22:00:51 24 4
gpt4 key购买 nike

新年快乐!

我有一个模型可以容纳数十万条记录。该模型如下所示:

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。两者在这个具体操作上会有什么区别吗?

最佳答案

我通常使用 orm 函数,它更具可读性并且在数据库级别运行,实际上计算不同值的 RDBMS 也是如此,并且您只需一步就可以得到结果。

您可以使用 python 集完成相同的操作,但您需要先获取所有数据集,然后应用 set()。因此,您必须执行两步操作才能完成相同的操作。

在第一种情况下 (orm),您只有 I/O 开销,而在第二种情况下,您有 I/O 开销 + 函数调用,所以我会选择 ORM 的 distinct。

关于python - 哪个扩展性更好? ORM 的 distinct() 或 python set(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14116642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com