SQL Server,这是正确的索引用法吗?

时间:2011-04-20 15:06:26

标签: asp.net sql-server linq performance indexing

我正试图掌握索引。鉴于表格:

Books
------
ID (PK)
Title
CategoryID (FK)
AuthorID (FK)

在我的ASP.net页面中,如果我想提高检索时间,我会按作者或类别提取图书,我会在CategoryID Asc, AuthorID asc上创建索引吗?

我是否正确理解了它?如果我使用上面的多个列,那是一个叫clustered index还是其他的?

3 个答案:

答案 0 :(得分:4)

您应该创建两个索引,一个用于CategoryID,另一个用于AuthorID。如果你在另一个中寻找一个,那么两者都不在同一个索引中;如果你一直在同时查询两者(例如类别和作者),你需要这样做。

聚簇索引控制数据的物理顺序。通常,如果您有一个标识列,将其用作聚簇索引(默认情况下是主键)就可以了。

答案 1 :(得分:3)

clustered 索引表示数据按索引指定的顺序存储在表和磁盘(等)中。这样做的结果是,只能存在一个聚簇索引。

索引CategoryID Asc, AuthorID asc将更快地查找特定类别,并且对特定作者的特定类别进行查找将是理想的。但它不仅仅是作者查找的理想选择,因为您必须为每个类别找到作者。在这种情况下,两个单独的索引会更好。

答案 2 :(得分:2)

适当的索引取决于查询的作用。如果您有针对类别和作者加入的查询,那么您可能会使用包含这两个字段的索引,否则您可能会更多地使用两个单独的索引。

聚簇索引是决定表中记录的存储顺序的索引,与其包含的字段数无关。您应该已经在主键上有一个聚簇索引,因此您无法为该表创建另一个聚簇索引。