SQL索引

鴨脖發表於2013-05-21
索引主要用來提升資料檢索速度,在資料量很大的時候很有用. 索引相當於圖書館的圖書目錄,你要找本書可以在圖書目錄上找到這本書在哪個書架第幾本,這樣明顯比到書架去找書要快得多,索引就是這個道理. 索引在資料庫優化當中起著非常重要的作用,像我的網站(http://www.99sc.cn)裡面的 表基本上都建有索引, 這樣可以使得我的網站資料在百萬千萬條資料的時候也不會很慢(只是現在資料很少,呵呵),如果沒有索引估計會很慘. 以下是網上的介紹,看看吧: 

索引簡介 

索引是表示資料的另一種方式,它提供的資料順序不同於資料在磁碟上的物理儲存順序。索引的特殊作用是在表內重新排列記錄的物理位置。索引可建立在資料表的一列上,或建立在表的幾列的組合上。 

回想一下圖書館中,存放著一架一架的圖書。假設要找一本書,圖書管理員視必要一架一架的尋找,直到找到想要的那本書為止。這樣的查詢肯定費時費力,那麼管理員可以將所有的圖書標題按字母分類建立索引卡片,按字母順序放在不同的辦公抽屜中,這樣一架一架查詢圖書的過程就變成了在辦公桌前抽屜中查詢索引卡片了,很容易得到有關這本書的資訊。 

再進一步設想,圖書管理員很勤快,他不僅按照圖書標題字母分類,而且還按作者姓名和出版社分別建立了另外的索引卡片,這個過程將給借閱者在檢索圖書資訊時以更大的靈活性。因此在一個資料表中是可以建立多個索引的。 

在資料庫中,對無索引的表進行查詢一般稱為全表掃描。全表掃描是資料庫伺服器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。這個操作可以比作在圖書館中查書,從第一個書架的第一本書開始,瀏覽每一本書,直到發現所要的書為止。為了進行高效查詢,可以在資料表上針對某一欄位建立索引,由於該索引包括了一個指向資料的指標,資料庫伺服器則只沿著索引排列的順序對僅有一列資料的索引進行讀取(只建立一個索引)直至索引指標指向相應的記錄上為止。由於索引只是按照一個欄位進行查詢,而沒有對整表進行遍歷,因此一般說來索引查詢比全表掃描的速度快。 

那麼,是不是使用索引查詢一定比全表掃描的速度快呢?答案是否定的。如果查詢小型資料表(記錄很少)或是查詢大型資料表(記錄很多)的絕大部分資料,全表掃描更為實用。例如,查詢“性別”欄位,其值只能是“男或女”,在其上建立索引的意義就不大,甚至不允許在布林型、大二進位制型(備註型、影像型等)上建立索引。 

相關文章