2010-09-03 117 views
2

集羣索引和非集羣索引是否都在B樹上工作?我讀過聚簇索引影響數據如何物理存儲在表中的方式,而使用非聚簇索引創建列的單獨副本並按排序順序存儲。另外,Sql Server默認在主鍵上創建聚簇索引。混淆了聚簇索引和非聚簇索引。包含5個疑問

這是否意味着:

1)非聚簇索引佔比聚集索引更多的空間,因爲列的一個單獨的副本存儲在非羣集?

2)當我們有基於兩列的主鍵時,聚簇和非聚簇索引如何工作..(StudentName,Marks)?

3)是否只有兩種類型的索引?如果是這樣,那麼什麼是位圖索引?我似乎無法在Sql Server Management Studio中找到任何這樣的索引類型,但在我的數據庫軟件書中提到了所有這些類型。

4)是否在主鍵有效性上創建聚簇索引或非聚簇索引?

5)假設我們在名稱上創建聚簇索引,即數據以物理方式存儲在排序順序名稱中,則明智地創建新記錄。新紀錄如何在桌上找到它?

感謝提前:)

回答

2

索引是從實際的數據頁分開存儲結構和簡單地包含指向數據頁的。在SQL Server索引中是B樹。

聚簇索引根據爲索引定義的列對錶中的數據頁進行排序和存儲。在SQL Server 2005中,您可以將其他列添加到索引,所以當您具有組合主鍵時,它不應該是一個問題。你可以想象一個聚集索引像一組文件夾文件櫃。在第一個繪圖中,您有以A開頭的文檔,並且在該繪圖的第一個文件夾中,您可能具有從AA到AC等的文檔。要搜索「Spider」,可以直接跳到S畫面並查找包含「SP」的文件夾,並快速找到您要查找的內容。但很顯然,如果你用一個索引對所有文檔進行物理分類,那麼你不能用另一個索引對同一組文檔進行物理分類。因此,每個表只有一個聚簇索引。

非聚集索引是一個單獨的結構,非常類似於書籍背面的目錄或索引。所以我想我只專門回答了你的一些問題:

  1. 是索引確實佔用空間,但沒有原始表格那麼多。這就是爲什麼你必須仔細選擇你的索引。由於必須維護索引,因此更新操作的性能也有所下降。

  2. 你的書會提及所有理論類型的指數。位圖索引在數據倉庫應用程序或具有幾個不同的值(如星期幾等)的數據等方面很有用,因此它們通常不會在基本的RDBMS中使用。我知道Oracle有一些實現,但我對此不太瞭解。

  3. 我認爲指數的效率取決於該字段的使用方式。預計您的表中的大部分數據掃描都將在主鍵上完成,然後主鍵上的索引纔有意義。您通常會將索引添加到出現在查詢的where子句或連接條件中的列中。

  4. 在插入時必須保持索引,所以系統需要做一些額外的工作來重新排列一些東西。

+0

面試官在採訪中問我爲什麼非聚集索引不會佔用磁盤空間? 我不知道這是否是他的詭計。你能否介紹一下這個概念? 在此先感謝 – 2014-05-24 07:49:06

+0

@NithinGangadharan,因爲聚集索引仍保留在B-Tree中,並具有需要空間的中間級別。可能這是關鍵。 – levi 2015-04-15 20:31:12

+0

@levi非常感謝您的回覆。所以你相信即使非聚類索引佔據空間,我是對的嗎? 但面試官不斷拒絕我的回答,所以我很困惑。也許這可能只是他的一個騙局。 – 2015-04-27 17:15:17