我应该在搜索字段上添加TSI索引ID

时间:2012-04-04 15:59:04

标签: tsql database-indexes

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

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

1 个答案:

答案 0 :(得分:2)

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

时,它才会有所帮助

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

此外,每个非聚集索引都已包含聚簇索引的值,以便在使用非聚集索引找到聚簇索引后,它可以使用聚簇索引查找该行。 You wouldn't have to include ID in your non-clustered index if you wanted to make it a covering index for the fields (FirstName, LastName, Id)

最后请注意,如果您使用FirstNameLastName制作单个索引,则此索引仅用于包含索引前沿FirstName的搜索。如果您打算仅使用LastNameFirstName执行搜索,请创建两个索引,每列一个。