[英]Should I use indexes for a many-to-many database table?
使用以下列為名為user_movies的表創建索引是否有意義:
user_id movie_id
在這張桌子上插入或更新會有更多的閱讀,但我不知道該怎么做。 另外:在這種情況下是否足以省略主鍵?
該表的正確定義如下:
CREATE TABLE user_movies (
user_id INT NOT NULL,
movie_id INT NOT NULL,
PRIMARY KEY (user_id, movie_id),
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (movie_id) REFERENCES movies(movie_id)
) ENGINE=InnoDb;
注意“主鍵”是約束,而不是列。 最佳做法是在每個表中都有一個主鍵約束 。 不要將主鍵約束與自動生成的偽鍵列混淆。
在MySQL中,聲明外鍵或主鍵隱式創建索引。 是的,這些都是有益的。
我會單獨索引兩列,是的,你可以消除主鍵。
我一直聽說你應該在BOTH列上創建一個唯一索引,首先是單向( user_id
+ movie_id
),然后是另一種方式( movie_id
+ user_id
)。 通過一些快速而骯臟的測試,它在我的應用程序中的工作速度稍快(不多,大約10-20%)。
它還確保你不能有兩行將同一個movie_id
到同一個user_id
(這可能很好,但可能並不總是如此)。
如果您使用這樣的“連接表”,您可能會在查詢中使用某些連接 - 這些連接可能會受益於這兩列中每一列的索引(這意味着兩個單獨的索引)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.