2011-08-24 34 views
1

我只是在我的应用程序数据库表上进行性能测试。我在sql server中的索引概念并不差。也许当我实际上我的理论让我感到困惑。嗨嗨SQl服务器中的非集群索引

这里我的问题是,你能告诉我一个场景,我需要在一张桌子上使用多个非聚集索引? 。

我们是否需要一本书的多个索引?我很困惑 。

请帮忙。

+1

当你可能以多种不同的方式查找值。例如根据出生日期或姓名搜索人员列表。 –

回答

2

Indixing非常复杂,超出了这里简单回复的范围。但是,通常,您可以根据从表中读取数据的方式将索引添加到表中。

,如果你有一个表:

YourTable 
ID   int identity PK 
WidgetName varchar(10) 
WidgetSize numeric(6,2) 

...你经常运行:SELECT.. WHERE WidgetName='xyz'然后WidgetName 添加一个索引,如果你从来没有SELECT.. WHERE WidgetSize =12.4然后不为该列添加一个索引。

+0

谢谢,那么INCLUDE子句用于什么?以及它如何工作? –

+0

当您的查询使用它通过索引数据搜索的索引时,一旦它找到您的行,它将使用“指针”返回表中的实际行以获取查询所需的所有列。如果索引包含查询所需的所有列,那么它可以跳过查找实际行的步骤(它具有索引中所需的所有信息)。大多数情况下,您只需要在某些列上使用索引(特别是如果它是唯一的)。 'INCLUDE'允许您将额外的数据列添加到索引仅用于数据目的,它们不是索引中可搜索或唯一部分的一部分... –

+0

...它们只会帮助避免返回实际的表格并获取这些列。这就是为什么'SELECT *'很糟糕的原因之一,即使查询使用索引,您也需要返回表格并获取所有列。在索引上使用'INCLUDE'会有轻微的损失,每个'insert'或'update'都必须将更多数据推送到索引。在您多次阅读的典型应用中,与选择速度的增益相比,这通常非常小。 –