3

假设我有一个典型的客户表;

Id Int Identity Primary Key, 
FirstName varchar(255), 
LastName varchar(255), 
Phone VarChar(30)

所以主键在 Id 上创建了一个聚集唯一索引。

为了使搜索更快,我想为名称字段添加索引。

我的问题是我是否应该将 Id 添加到这些索引中,或者这些索引是否会与主键相关联。

例如;

Create Index IX_Customer_FirstLastName On Customers(FirstName, LastName, Id)

……是不是太过分了?

以下是或多或少有效吗?

Create Index IX_Customer_FirstLastName On Customers(FirstName, LastName)

TIA

4

1 回答 1

3

ID将其添加到您的其他索引是没有意义的。只有当您有大量具有相同firstName lastName组合的行并且您已经知道ID...

但是,如果您已经知道ID要搜索的记录,则可以使用聚集索引进行搜索。

此外,每个非聚集索引都已包含聚集索引的值,以便在使用非聚集索引找到行后,它可以使用聚集索引查找行。 如果您想让非聚集索引成为字段的覆盖索引(, , ) ,则不必包含在非聚集索引中IDFirstNameLastNameId

最后注意,如果您使用FirstNameand创建单个索引LastName,则该索引将仅用于包含FirstName索引前沿的搜索。如果您计划使用 justLastName或 just执行搜索FirstName,请创建两个索引,每列一个。

于 2012-04-04T16:01:33.923 回答