是否应该索引多对多表?什么样的索引最好?
这是一个示例表:
CREATE TABLE user_role (
userId INT,
roleId INT
)
--edit: drachenstern - I added the table def based on the original comments, and assumed ints.
是否应该索引多对多表?什么样的索引最好?
这是一个示例表:
CREATE TABLE user_role (
userId INT,
roleId INT
)
--edit: drachenstern - I added the table def based on the original comments, and assumed ints.
您不需要代理键(除非您使用无脑 ORM),而且您几乎总是需要第二个索引
在 SQL Server 中,非聚集索引包含聚集键,因此我将在之前提供的解决方案的基础上提供以下替代解决方案:
这是假设用户 ID 更有可能是搜索/扫描候选者。
如果使用基于 userid 的过滤条件运行查询,则聚集索引将满足需求;如果使用基于 roleid 的过滤条件运行查询,则非聚集索引将覆盖该查询;如果查询同时使用 roleid 和 userid 进行过滤,则聚集索引将覆盖查询。
请参考以下关于集群键如何包含在非聚集索引中的文章信息:
http://www.simple-talk.com/sql/learn-sql-server/effective-clustered-indexes/
谢谢,杰夫