2012/10/23

DB Cluster and NonCluster

索引是一種與資料表或檢視有關的磁碟內存結構,它會加快從該資料表或檢視中擷取資料列的速度。索引中包含從資料表或檢視中一或多個資料行建出的索引鍵。這些索引鍵儲存在結構中 (B 型樹狀目錄),讓 SQL Server 可以快速有效地找到與索引鍵值相關的一或多個資料列。
資料表或檢視可包含下列類型的索引:
  • 叢集
    • 叢集索引將資料表或檢視中的資料列依其索引鍵值排序與儲存。這些就是索引定義中包含的資料行。因為資料列本身只能以一種順序排序,所以每個資料表只能有一個叢集索引。
    • 只有當資料表包含叢集索引時,資料表中的資料列才會以排序順序儲存。當資料表有叢集索引時,資料表又稱為叢集資料表。如果資料表沒有任何叢集索引,它的資料列就儲存在未排序的結構中,這個結構稱為堆積。
  • 非叢集
    • 非叢集索引有一個與資料列完全分開的結構。非叢集索引包含非叢集索引鍵值,而每個索引鍵值項目都有一個指標,指向包含索引鍵值的資料列。
    • 從非叢集索引中的索引列指向資料列的指標被稱為資料列定位器。資料列定位器的結構須視資料頁儲存在堆積或叢集資料表而定。若是堆積,資料列定位器是指向資料列的指標。若是叢集資料表,資料列定位器就是叢集索引鍵。
    • 在 SQL Server 2005 中,您可以將無索引鍵資料行加入非叢集索引的分葉層級中,以規避現有索引鍵的限制 (900 位元組和 16 個索引鍵資料行),並執行完全涵蓋的索引查詢。如需詳細資訊。
叢集與非叢集索引都可以是唯一的。這表示任何兩個資料列不得以相同的值做為索引鍵。否則,索引就不是唯一的,那麼多個資料列就可以共用同一個索引鍵值。
設計不良的索引與不足的索引是資料庫應用程式瓶頸的主要原因。設計有效的索引是達到良好資料庫和應用程式效能最重要的一點。為資料庫選擇正確的索引及工作負載時,往往很難在查詢速度與更新成本之間取得平衡。範圍較小的索引,或是索引的索引鍵中包含較少的資料行,所需的磁碟空間與維護負擔相對較小。相反的,如果索引範圍較大,能涵蓋的查詢就更多。在找到最有效率的索引之前,可能需要先試過數種不同的設計。索引可以新增、修改和卸除,不會影響資料庫結構描述或應用程式的設計。所以,不要吝於嘗試各種不同的索引。
使用索引不一定就會有良好的效能,良好的效能和有效率地使用索引也不能劃上等號。如果使用索引對產生最佳效能一定有幫助,查詢最佳化工具的作業就很單純。但事實上,選擇不正確的索引可能得不到最佳效能,因為 INSERT、UPDATE 與 DELETE 陳述式執行時,只要資料表中的資料一變更,所有的索引也都必須隨著調整。

沒有留言:

張貼留言