我正在处理一个读取密集型数据库,并使用经常双向读取的联结表。
联结表包含两列,IDA 和 IDB
联结表的主键将是两列的复合键。
我想创建一个索引,以便数据库可以快速为特定的 IDB 查找相应的 IDA。
该索引是否应同时包含 IDB 和 IDA?还是应该只包含 IDB?
换句话说,我的表应该是这样的:
CREATE TABLE ExJunction(
IDA INTEGER NOT NULL,
IDB INTEGER NOT NULL,
CONSTRAINT PK_ExJunction_IDA_IDB PRIMARY KEY CLUSTERED (IDA ASC, IDB ASC),
CONSTRAINT AK_ExJunction_IDB_IDA UNIQUE (IDB ASC, IDA ASC)
)
或者像这样:
CREATE TABLE ExJunction(
IDA INTEGER NOT NULL,
IDB INTEGER NOT NULL,
CONSTRAINT PK_ExJunction_IDA_IDB PRIMARY KEY CLUSTERED (IDA ASC, IDB ASC),
INDEX IX_ExJunction_IDB NONCLUSTERED (IDB ASC)
)
或者,我应该完全做些别的事情吗?
我很难将其概念化,因为我一直认为非聚集索引包含索引键和主键。但是索引键已经包含在主键中,那么,它们是相同的(都包含 IDB 和 IDA)还是不同的?