程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> SQL Server和Oracle中索引介紹

SQL Server和Oracle中索引介紹

編輯:Oracle數據庫基礎
 

1 SQL Server中的索引

  索引是與表或視圖關聯的磁盤上結構,可以加快從表或視圖中檢索行的速度。索引包含由表或視圖中的一列或多列生成的鍵。這些鍵存儲在一個結構(B 樹)中,使 SQL Server 可以快速有效地查找與鍵值關聯的行。

  表或視圖可以包含以下類型的索引:

  聚集索引

  聚集索引根據數據行的鍵值在表或視圖中排序和存儲這些數據行。索引定義中包含聚集索引列。每個表只能有一個聚集索引,因為數據行本身只能按一個順序排序。

  只有當表包含聚集索引時,表中的數據行才按排序順序存儲。如果表具有聚集索引,則該表稱為聚集表。如果表沒有聚集索引,則其數據行存儲在一個稱為堆的無序結構中。

  每個表幾乎都對列定義聚集索引來實現下列功能:

  1、可用於經常使用的查詢。

  2、提供高度唯一性。

  在創建聚集索引之前,應先了解數據是如何被訪問的。考慮對具有以下特點的查詢使用聚集索引:

  使用運算符(如 BETWEEN、>、>=、< 和 <=)返回一系列值。

  使用聚集索引找到包含第一個值的行後,便可以確保包含後續索引值的行物理相鄰。例如,如果某個查詢在一系列采購訂單號間檢索記錄,PurchaseOrderNumber 列的聚集索引可快速定位包含起始采購訂單號的行,然後檢索表中所有連續的行,直到檢索到最後的采購訂單號。

  返回大型結果集。

  使用 JOIN 子句;一般情況下,使用該子句的是外鍵列。

  使用 ORDER BY 或 GROUP BY 子句。

  在 ORDER BY 或 GROUP BY 子句中指定的列的索引,可以使數據庫引擎 不必對數據進行排序,因為這些行已經排序。這樣可以提高查詢性能。

  聚集索引不適用於具有下列屬性的列:

  頻繁更改的列

  這將導致整行移動,因為數據庫引擎 必須按物理順序保留行中的數據值。這一點要特別注意,因為在大容量事務處理系統中數據通常是可變的。

  寬鍵

  寬鍵是若干列或若干大型列的組合。所有非聚集索引將聚集索引中的鍵值用作查找鍵。為同一表定義的任何非聚集索引都將增大許多,這是因為非聚集索引項包含聚集鍵,同時也包含為此非聚集索引定義的鍵列。

非聚集索引

  非聚集索引具有獨立於數據行的結構。非聚集索引包含非聚集索引鍵值,並且每個鍵值項都有指向包含該鍵值的數據行的指針。

  從非聚集索引中的索引行指向數據行的指針稱為行定位器。行定位器的結構取決於數據頁是存儲在堆中還是聚集表中。對於堆,行定位器是指向行的指針。對於聚集表,行定位器是聚集索引鍵。

  在 SQL Server 2005 中,可以向非聚集索引的葉級別添加非鍵列以跳過現有的索引鍵限制(900 字節和 16 鍵列),並執行完整范圍內的索引查詢。

  非聚集索引與聚集索引具有相同的 B 樹結構,它們之間的顯著差別在於以下兩點:

  1、基礎表的數據行不按非聚集鍵的順序排序和存儲。

  2、非聚集索引的葉層是由索引頁而不是由數據頁組成。

  設計非聚集索引時需要注意數據庫的特征:

  更新要求較低但包含大量數據的數據庫或表可以從許多非聚集索引中獲益從而改善查詢性能。

  決策支持系統應用程序和主要包含只讀數據的數據庫可以從許多非聚集索引中獲益。查詢優化器具有更多可供選擇的索引用來確定最快的訪問方法,並且數據庫的低更新特征意味著索引維護不會降低性能。

  聯機事務處理應用程序和包含大量更新表的數據庫應避免使用過多的索引。此外,索引應該是窄的,即列越少越好。

  一個表如果建有大量索引會影響 INSERT、UPDATE 和 DELETE 語句的性能,因為所有索引都必須隨表中數據的更改進行相應的調整。

  唯一索引

  唯一索引確保索引鍵不包含重復的值,因此,表或視圖中的每一行在某種程度上是唯一的。

  聚集索引和非聚集索引都可以是唯一索引。

  包含性列索引

  一種非聚集索引,它擴展後不僅包含鍵列,還包含非鍵列。

  索引涵蓋

  指查詢中的SELECT與WHERE子句的所用列同時也屬於非聚集索引的情況。這樣就可以更快檢索數據,因為所有信息都可以直接來自於索引頁,從而SQL Server可以避免訪問數據頁。加上獨立的索引文件組,可以用最快速度訪問數據。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved