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