數據庫引入了索引
用戶對數據庫最頻繁的操作是進行數據查詢一般情況下數據庫在進行查詢操作時需要對整個表進行數據搜索當表中的數據很多時搜索數據就需要很長的時間這就造成了服務器的資源浪費為了提高檢索數據的能力數據庫引入了索引機制
有關索引的比喻
從某種程度上可以把數據庫看作一本書把索引看作書的目錄通過目錄查找書中的信息顯然較沒有目錄的書方便快捷
數據庫索引實際是什麼?(兩部分組成)
索引是一個單獨的物理的數據庫結構它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單
索引在表中的角色
一個表的存儲是由兩部分組成的一部分用來存放表的數據頁面另一部分存放索引頁面索引就存放在索引頁面上
索引高效原理
通常索引頁面相對於數據頁面來說小得多當進行數據檢索時系統先搜索索引頁面從中找到所需數據的指針再直接通過指針從數據頁面中讀取數據
索引的分類
在SQL Server 的數據庫中按存儲結構的不同將索引分為兩類簇索引(Clustered Index)和非簇索引(Nonclustered Index)
()簇索引對表的物理數據頁中的數據按列進行排序然後再重新存儲到磁盤上即簇索引與數據是混為一體的它的葉節點中存儲的是實際的數據由於簇索引對表中的數據一一進行了排序因此用簇索引查找數據很快但由於簇索引將表的所有數據完全重新排列了它所需要的空間也就特別大大概相當於表中數據所占空間的% 表的數據行只能以一種排序方式存儲在磁盤上所以一個表只能有一個簇索引
()非簇索引具有與表的數據完全分離的結構使用非簇索引不用將物理數據頁中的數據按列排序非簇索引的葉節點中存儲了組成非簇索引的關鍵字的值和行定位器行定位器的結構和存儲內容取決於數據的存儲方式如果數據是以簇索引方式存儲的則行定位器中存儲的是簇索引的索引鍵;如果數據不是以簇索引方式存儲的這種方式又稱為堆存儲方式(Heap Structure)則行定位器存儲的是指向數據行的指針非簇索引將行定位器按關鍵字的值用一定的方式排序這個順序與表的行在數據頁中的排序是不匹配的由於非簇索引使用索引頁存儲因此它比簇索引需要更多的存儲空間且檢索效率較低但一個表只能建一個簇索引當用戶需要建立多個索引時就需要使用非簇索引了
小結Clustered Index 是與物理數據混在一起並對物理數據進重排就像使用拼音查字典;Unclustered Index 是與物理數據完全分離的利用額外空間對關鍵字進行重排就像使用部首查字典
數據庫索引應用
一索引的概念
索引就是加快檢索表中數據的方法數據庫的索引類似於書籍的索引在書籍中索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息在數據庫中索引也允許數據庫程序迅速地找到表中的數據而不必掃描整個數據庫
二索引的特點
索引可以加快數據庫的檢索速度
索引降低了數據庫插入修改刪除等維護任務的速度
索引創建在表上不能創建在視圖上
索引既可以直接創建也可以間接創建
可以在優化隱藏中使用索引
使用查詢處理器執行SQL語句在一個表上一次只能使用一個索引
其他
三索引的優點
創建唯一性索引保證數據庫表中每一行數據的唯一性
大大加快數據的檢索速度這也是創建索引的最主要的原因
加速表和表之間的連接特別是在實現數據的參考完整性方面特別有意義
在使用分組和排序子句進行數據檢索時同樣可以顯著減少查詢中分組和排序的時間
通過使用索引可以在查詢的過程中使用優化隱藏器提高系統的性能
四索引的缺點
創建索引和維護索引要耗費時間這種時間隨著數據量的增加而增加
索引需要占物理空間除了數據表占數據空間之外每一個索引還要占一定的物理空間如果要建立聚簇索引那麼需要的空間就會更大
當對表中的數據進行增加刪除和修改的時候索引也要動態的維護降低了數據的維護速度
[] []
From:http://tw.wingwit.com/Article/program/MySQL/201311/29604.html