【问题标题】:What is the a performance cost of Django's unique_together featureDjango 的 unique_together 功能的性能成本是多少
【发布时间】:2018-02-16 13:10:48
【问题描述】:

在我看来,当使用更复杂的unique_together 元组时,似乎会有很多处理或搜索。似乎更好的选择是在数据库中创建记录时严格处理唯一性。有谁碰巧知道使用unique_together 的成本是多少,尤其是当它们涉及更复杂的元组时?

我目前有一个可能需要转换的模型

index_together = unique_together = (('a', 'b'), ('a', 'c', 'd'))

index_together = unique_together = (('a', 'b', 'e'), ('a', 'c', 'd', 'e'))

【问题讨论】:

  • “严格处理唯一性”是什么意思?这不就是 unique_together 的作用吗?
  • 我的意思是通过检查符合预期标准的记录来严格处理唯一性。如果ModelName.objects.get(a=a, b=b, e=e)更新记录,否则创建新记录。当然,这种方法有一些明显的缺点,我可以看到最大的缺点是你需要确保在可以创建记录的任何地方都执行这种检查,它可能比unique_together

标签: mysql django database django-models


【解决方案1】:

unique_together 在数据库级别实现为UNIQUE CONSTRAINT。阅读 SQL 索引是如何工作的,关于读/写比率(索引是在写入数据时构建的,因此它会减慢写入操作,但是当读取比写入多得多时,这不是问题),阅读有关索引选择性/基数的信息。检索数据时使用EXPLAIN查询来检查索引是否被使用(不被忽略)。

拥有多个大型唯一索引是表应拆分为两个或几个列数较少的标志之一,通过一对多关系相关。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 2011-02-12
    • 1970-01-01
    • 2011-06-20
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多