在具有复合 PK 的仅两列连接 table 中,我需要另一个索引吗?
In a two column only junction table with compound PK, do I need another index?
考虑以下几点:
tbl_Book
- BookID PK int identity(1,1)
tbl_Author
- AuthorID PK int identity(1,1)
tbl_Book作者
- BookID FK int
- AuthorID FK int
我在 (BookID, AuthorID) 上有一个 composite/compound 主键。更具体地说,基于 SSMS 设计器的默认值:
- 列:(BookID ASC,AuthorID ASC)
- 是否独一无二:是
- 类型:主键
- 创建为集群:是
在任何时候,我是否需要在任何一列(BookID、AuthorID)上使用非聚集索引,或者当它只是而且永远只是 [=51= 中的那两列时它不相关吗? ], 作为复合键。
如果 运行 针对此 table 的唯一查询指定复合键的两个值(或仅第一个值),则您不需要其他索引。我唯一认为你可能需要另一个索引的情况是,如果你只对复合键中的第二列进行了查询(并且不能将其作为第一列,因为你也只对该列进行了查询)。
简答:事情应该没问题。
对 BookID 的搜索很可能是索引搜索
对 AuthorID(没有 BookID)的搜索将是索引扫描
如果您永远不会只搜索第二个,那也没关系
似乎更有可能只搜索作者,所以我会改变顺序。
考虑以下几点:
tbl_Book
- BookID PK int identity(1,1)
tbl_Author
- AuthorID PK int identity(1,1)
tbl_Book作者
- BookID FK int
- AuthorID FK int
我在 (BookID, AuthorID) 上有一个 composite/compound 主键。更具体地说,基于 SSMS 设计器的默认值:
- 列:(BookID ASC,AuthorID ASC)
- 是否独一无二:是
- 类型:主键
- 创建为集群:是
在任何时候,我是否需要在任何一列(BookID、AuthorID)上使用非聚集索引,或者当它只是而且永远只是 [=51= 中的那两列时它不相关吗? ], 作为复合键。
如果 运行 针对此 table 的唯一查询指定复合键的两个值(或仅第一个值),则您不需要其他索引。我唯一认为你可能需要另一个索引的情况是,如果你只对复合键中的第二列进行了查询(并且不能将其作为第一列,因为你也只对该列进行了查询)。
简答:事情应该没问题。
对 BookID 的搜索很可能是索引搜索
对 AuthorID(没有 BookID)的搜索将是索引扫描
如果您永远不会只搜索第二个,那也没关系
似乎更有可能只搜索作者,所以我会改变顺序。