假设我有一个典型的客户表;
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
答案 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
)
最后请注意,如果您使用FirstName
和LastName
制作单个索引,则此索引仅用于包含索引前沿FirstName
的搜索。如果您打算仅使用LastName
或FirstName
执行搜索,请创建两个索引,每列一个。