SQL SERVER數據庫中的索引

1、索引分類:
    按照存儲方式分爲:聚集與非聚集索引
    按照維護與管理索引角度分爲:唯一索引、複合索引和系統自動創建的索引
2、索引目的和代價:
    索引是表的一個概念部分,目的是減少全表掃描,用來提高檢索數據的效率.

    它的代價. 索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時, 索引本身也會被修改. 這意味着每條記錄的INSERT , DELETE , UPDATE將爲此多付出4 , 5 次的磁盤I/O . 因爲索引需要額外的存儲空間和處理,那些不必要的索引或者不合理的索引反而會使查詢變慢.

常見的兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。
3、聚集索引:(表中存儲的數據按照索引的順序存儲,檢索效率比普通索引高,但對數據新增/修改/刪除的影響比較大)
  
    1、一張表只能包含一個聚集索引,但並非只有一列,該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
    2、在聚集索引中,表中各行的存儲(物理)順序與鍵值的邏輯(索引)順序相同;
    3、聚集索引通常可加快UPDATE和DELETE操作的速度,因爲這兩個操作需要讀取大量的數據;
    4、創建或修改聚集索引可能要花很長時間,因爲執行這兩個操作時要在磁盤上對錶的行進行重組;
    5、另一個使用索引的好處是,它提供了主鍵(primary key)的唯一性驗證. (其實本人也不知道爲什麼它就提供了唯一性驗證呢,希望達人可以講解.)
創建聚集索引的語法:
   create CLUSTERED INDEX idximpID ON EMP(empID)
4、非聚集索引
    1、一個表可以最多可以創建249個非聚集索引
    2、先建聚集索引才能創建非聚集索引(有待確認)
    3、非聚集索引數據的物理存儲順序與非聚集索引列不同
    4、數據存儲地址與索引存儲地址在不同位置
    5、索引在葉節點上存儲,在葉節點上有一個“指針”直接指向要查詢的數據的存儲位置
    6、數據不會根據索引鍵的順序重新排列數據
    語法:
    create NONCLUSTERED INDEX idxempID on emp(empID)
5、複合索引:如果在兩上以上的列上創建一個索引,則稱爲複合索引。
    那麼,不可能有兩行的姓和名是重複的
    語法:
    create index indexfullname on addressbook(firstname,lastname)
6、惟一索引:惟一索引可以確保索引列不包含重複的值.
    可以用多個列,但是索引可以確保索引列中每個值組合都是唯一的

    舉個例子:姓和名是一個很好的例子,也很容易理解.
    姓   名
    李   二
    張   三
    王   五
    語法: create unique index idxempid on emp(姓,名)
    系統自建的索引:在使用T_sql語句創建表的時候使用PRIMARY KEY或UNIQUE約束時,會在表上自動創建一個惟一索引
7、生活中的索引--字典
    字典中按拼音查找--聚集索引
    正文內容本身就是一種按照一定規則排列的目錄稱爲“聚集索引”。
    按部首---非聚集索引
    這種目錄純粹是目錄,正文純粹是正文的排序方式稱爲“非聚集索引”,可以通過目錄索引到正文。

8、何時使用聚集索引或非聚集索引
    以下,引用某位總結的表格:
動作描述 使用聚集索引 使用非聚集索引
列經常被分組排序
返回某範圍內的數據 不應
一個或極少不同值 不應 不應
小數目的不同值 不應
大數目的不同值 不應
頻繁更新的列 不應
外鍵列
主鍵列
頻繁修改索引列 不應

  其實你只要知道:
1、聚集索引是存儲的順序和索引的順序一致
2、非聚集索引是通過非聚集索引的指針來再來查詢數據的存儲位置
從原理的角度來分析一下如何才能更快地索引到存儲位置,就可以把握這種什麼時候需要建立哪一種索引的原則了.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章