2008-09-25 42 views

回答

29
  • 獨特 - 該列擔保唯一值(或一組列)在索引包括
  • 覆蓋 - 包括所有在一個特定的查詢中使用的(或一組查詢的)列,允許數據庫僅使用索引而不必實際查看錶數據以檢索結果
  • 集羣 - 這是實際數據在磁盤上排序的方式,這意味着如果查詢使用聚集索引來查找向上的價值觀,它沒有采取仰視不包含在索引中的任何數據的實際錶行的額外步驟。
+2

thanx它對我有幫助4我也是 – Freelancer 2012-12-20 11:33:24

6

OdeToCode has a good article covering the basic differences

,因爲它說的文章:

適當的索引對於大型數據庫中的良好表現 至關重要。 有時你可以彌補一個良好的指數不佳 書面查詢,但 可能很難彌補差 索引用再好的查詢。

非常真實,如果你剛剛開始使用它,我會專注於聚集索引和複合索引,因爲它們可能會成爲你使用最多的索引。

6

我會添加一些索引類型的

位圖 - 當你有不同的可能值非常低的數字,速度非常快,不會佔用太多的空間

PARTITIONED - 允許索引爲了存儲或性能的原因,基於通常對於非常大的數據庫對象有利的某些屬性進行分區。

FUNCTION/EXPRESSION索引 - 用於根據表預先計算某個值並將其存儲在索引中,一個非常簡單的示例可能是基於lower()或子字符串函數的索引。

2

對於相同類型的索引,不同的數據庫系統有不同的名稱,因此請注意這一點。例如,在Oracle中稱爲「索引組織表」的SQL Server和Sybase稱爲「聚集索引」。

5

PostgreSQL允許部分索引,其中僅匹配謂詞的行被索引。例如,您可能需要爲客戶表索引僅用於那些處於活動狀態的記錄。這可能看起來像:

create index i on customers (id, name, whatever) where is_active is true; 

如果索引多列,並且有許多不活躍的客戶,這可能是在空間方面大贏(該指數將存儲在更少的磁盤頁),因此性能。打你需要的指標,至少指定謂詞:

select name from customers where is_active is true; 
0

SQL Server 2008有filtered indexes,類似於PostgreSQL的partial indexes。兩者都允許包含在僅符合指定條件的索引行中。

的語法與到PostgreSQL:

create index i on Customers(name) where is_alive = cast(1 as bit); 
3

傳統觀點認爲,指數選擇應基於基數。他們會說,

對於低基數列像GENDER,使用位圖。對於像LAST_NAME這樣的高基數,請使用b-tree。

這不是與Oracle,其中,索引的選擇應替代地基於(OLTP與OLAP)的類型的應用程序的情況下。具有位圖索引的表上的DML可能導致嚴重的鎖爭用。另一方面,Oracle CBO可以輕鬆地將多個位圖索引組合在一起,位圖索引可用於搜索空值。作爲一般規則:

對於頻繁的DML和日常查詢,使用B樹的OLTP系統。對於具有罕見DML和adhoc查詢的OLAP系統,請使用位圖。

我不確定這是否適用於其他數據庫,歡迎評論。下面的文章討論的主題進一步:

+0

索引組合是位圖索引的用例。 – Apocalisp 2008-09-27 19:25:24

1
  1. 獨特
  2. 集羣
  3. 非羣集
  4. 列存儲
  5. 指數無線個包括列
  6. 指數的計算列
  7. 過濾
  8. 空間
  9. XML
  10. 全文
相關問題