我有一个用户组(多对多关系),我有一个两难的境地。我可以检查用户是否已经在组中,它将对数据库进行2次查询(检查和插入),或者我可以在user_id和group_id上放置一个唯一索引,并且只是尝试插入新行,这将导致正确的用户组无论如何(将如果用户有这样的组,则失败。)
问题:哪种方法在这种表中有数百万行的真正大型应用程序上具有更快的性能?
PS。我知道第二种方法可能由于其他原因而不是唯一约束而失败,对某些人来说这似乎是一种不好的做法。
答案 0 :(得分:1)
即使第一种方法表现良好,你也需要一个索引,所以我认为一个独特的索引是必要的。
对于性能,第二种方法会更好,就像进行插入一样,如果你有一个索引,它会再次检查唯一性。
我会采用第二种方法,只需要处理所需的异常处理。