1. 程式人生 > >索引(Index)

索引(Index)

比較 我們 出了 數據 當我 全表掃描 漢語 找到 二分查找

無索引的表就是一個無序的行集。比如下面的人員表中有一些數據:

這個表上沒有索引,因此如果我們查找年齡等於17的人員時,必須查看表中的每一行,看它是否與所需的值匹配。這是一個全表掃描,很慢,如果表中只有少數幾個記錄與搜索條件相匹配,則其效率是相當低的。

如果我們經常要查詢某個年齡的人員,必須查看表中的每一行,看它是否與所需的值匹配。這是一個全表掃描,很慢,如果表中只有少數幾個記錄與搜索條件相匹配,則其效率是相當低的。

如果我們為年齡列創建一個索引,註意這裏的索引所采用的值是排序的:假如我們要查找年齡為13 歲的所有人員,那麽可以掃描索引,結果得出前3 行,當到達年齡為14的行的時候,我們發現它是一個比我們正在查找的年齡要大的人員。索引值是排序的,因此在讀到包含14 的記錄時,我們知道不會再有匹配的記錄,可以退出了。如果查找一個值,它在索引表中某個中間點以前不會出現,那麽也有找到其第一個匹配索引項的定位算法,而不用進行表的順序掃描(如二分查找法)。這樣,可以快速定位到第一個匹配的值,以節省大量搜索時間。

可以把索引想像成漢語字典的的按筆畫查找的目錄。漢語字典中的漢字是按拼音的順序排列在書頁中的,如果要查詢筆畫數為18 的漢字的話就必須挨個查找每個漢字來比較每個漢字的筆畫數,這種速度是讓人無法忍受的。而如果我們創建一個按筆畫查找的目錄:將筆畫為5 的漢字列出來,將筆畫為6 的漢字列出來……,這樣當我們要查詢筆畫數為18 的漢字的話只要來查找這個目錄就可以非常快速的查找到需要的數據了。

雖然索引可以提高數據查詢的速度,但是任何事物都是雙刃劍,它也有一些缺點:

索引占據一定磁盤空間,就像有按筆畫查找的目錄的書會比沒有這種目錄的書頁數要多一些。

索引減慢了數據插入和刪除的速度。因為每次插入和刪除的時候都需要更新索引,一個表擁有的索引越多,則寫操作的平均性能下降就越大。

索引(Index)