2011-08-24 70 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'都必須將更多數據推送到索引。在您多次閱讀的典型應用中,與選擇速度的增益相比,這通常非常小。 –