2013-10-26 106 views
0

我有一個usergroups(多對多關係),我有一個困境。我可以檢查用戶是否已經在組中,這將對數據庫進行2次查詢(檢查並插入),或者我可以在user_id和group_id上放置一個唯一索引,並嘗試插入新行,這會導致正確的用戶組(無論如何)如果用戶有這樣的組,則失敗)。數據庫索引檢查插入之前vs唯一索引

問題:哪種方法是對數百萬行的這種表非常大的應用程序更快的性能?

PS。我知道第二種方法可能由於其他原因而不是唯一約束而失敗,並且對於一些人來說這可能看起來是不好的做法。

+0

如果第一種方法是具體的,第二個「可能會失敗」,那麼性能是不是會在任何情況下失敗的問題... – Gavin

+0

(僅在第一種情況下,它會失敗比約束別的東西) – insanebits

回答

1

即使對於第一種方法來表現良好,那麼你需要一個指標,所以我覺得一個唯一索引將是必要的。

出於性能考慮,做第二種方法將是更好,因爲當你插入,這將再次爲唯一性檢查,如果你有到位的指標。

我會做第二個辦法,只是有必要的異常搬運就位。