回想壹下圖書館中,存放著壹架壹架的圖書。假設要找壹本書,圖書管理員視必要壹架壹架的尋找,直到找到想要的那本書為止。這樣的查找肯定費時費力,那麽管理員可以將所有的圖書標題按字母分類建立索引卡片,按字母順序放在不同的辦公抽屜中,這樣壹架壹架查找圖書的過程就變成了在辦公桌前抽屜中查詢索引卡片了,很容易得到有關這本書的信息。
再進壹步設想,圖書管理員很勤快,他不僅按照圖書標題字母分類,而且還按作者姓名和出版社分別建立了另外的索引卡片,這個過程將給借閱者在檢索圖書信息時以更大的靈活性。因此在壹個數據表中是可以建立多個索引的。
在數據庫中,對無索引的表進行查詢壹般稱為全表掃描。全表掃描是數據庫服務器用來搜尋表的每壹條記錄的過程,直到所有符合給定條件的記錄返回為止。這個操作可以比作在圖書館中查書,從第壹個書架的第壹本書開始,瀏覽每壹本書,直到發現所要的書為止。為了進行高效查詢,可以在數據表上針對某壹字段建立索引,由於該索引包括了壹個指向數據的指針,數據庫服務器則只沿著索引排列的順序對僅有壹列數據的索引進行讀取(只建立壹個索引)直至索引指針指向相應的記錄上為止。由於索引只是按照壹個字段進行查找,而沒有對整表進行遍歷,因此壹般說來索引查找比全表掃描的速度快。
那麽,是不是使用索引查詢壹定比全表掃描的速度快呢?答案是否定的。如果查詢小型數據表(記錄很少)或是查詢大型數據表(記錄很多)的絕大部分數據,全表掃描更為實用。例如,查詢“性別”字段,其值只能是“男或女”,在其上建立索引的意義就不大,甚至不允許在布爾型、大二進制型(備註型、圖像型等)上建立索引。
示例:
聚簇索引: