簡體   English   中英

我應該為多對多數據庫表使用索引嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM