带有附加数据的主键

Nao*_*aor 5 sql t-sql sql-server sql-server-2005

我在某处读过,可以选择在主键创建的树叶上存储其他数据.例如,如果我有一个包含列的表:row_id,customer_id,我需要显示customer_name,我可以在table和customers表之间进行连接.但我也可以使用customers表的主键(带有customer_id)存储customer_name,并且sql引擎不必加载整行客户以便获取客户名称.

有人能描述得更好吗?我该如何实现呢?

Joe*_*lli 5

对于SQL Server 2005+,听起来好像是在讨论包含列,但只有在所有列都在一个表中时才有效.

CREATE INDEX IX_Customers_RowCust
ON Customers (customer_id)
INCLUDE (customer_name);
Run Code Online (Sandbox Code Playgroud)

但是,我认为您描述的情况是(row_id,customer_id)在一个表中,而customer_name在第二个表中.对于这种情况,您需要创建索引视图.

CREATE VIEW vwCust WITH SCHEMABINDING AS 
    SELECT t.row_id, t.customer_id, c.customer_name
        FROM SomeTable t
            INNER JOIN Customers c
                ON t.customer_id = c.customer_id
GO
CREATE UNIQUE CLUSTERED INDEX vwCustRow ON vwCust (row_id)
GO
Run Code Online (Sandbox Code Playgroud)