首頁  >  文章  >  資料庫  >  索引是什麼?

索引是什麼?

藏色散人
藏色散人原創
2019-05-07 10:04:1586857瀏覽

索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的特殊資料庫結構,它是某個表中一列或若干列值的集合和對應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以依照目錄中的頁碼快速找到所需的內容。

索引是什麼?

(推薦教學:mysql影片教學

索引是一種特殊的資料庫結構,由資料表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。

索引提供指向儲存在資料表的指定列中的資料值的指針,然後根據您指定的排序順序對這些指針進行排序。資料庫使用索引以找到特定值,然後順指標找到包含該值的行。這樣可以使對應於表的SQL語句執行得更快,可快速存取資料庫表中的特定資訊。

透過索引,查詢資料時不用讀完記錄的所有信息,而只是查詢索引列。否則,資料庫系統將讀取每筆記錄的所有資訊進行比對。

可以把索引比喻為新華字典的音序表。例如,要查「庫」字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接找到。這樣就可以大大節省時間。

因此,使用索引可以大幅提高資料庫的查詢速度,也有效的提高了資料庫系統的效能。

為什麼要使用索引

索引就是根據表中的一列或若干列依照一定順序建立的列值與記錄行之間的對應關係表,實質上是一張描述索引列的列值與原表中記錄行之間一一對應關係的有序表。

索引是 MySQL 中十分重要的資料庫對象,是資料庫效能調優技術的基礎,常用於實現資料的快速檢索。

在MySQL 中,通常有以下兩種方式存取資料庫表的行資料:

1) 順序存取

##順序存取是在表中實行全表掃描,從頭到尾逐行遍歷,直到在無序的行資料中找到符合條件的目標資料。

順序存取實作比較簡單,但是當表中有大量資料的時候,效率非常低。例如,在幾千萬條數據中尋找少量的數據時,使用順序存取方式將會遍歷所有的數據,花費大量的時間,顯然會影響資料庫的處理效能。

2) 索引存取

索引存取是透過遍歷索引來直接存取表中記錄行的方式。

使用這種方式的前提是對錶建立一個索引,在列上建立了索引之後,查找資料時可以直接根據該列上的索引找到對應記錄行的位置,從而快速地查找到數據。索引儲存了指定列資料值的指針,根據指定的排序順序對這些指針進行排序。

例如,在學生基本資料表 tb_students 中,如果基於 student_id 建立了索引,系統就建立了一張索引列到實際記錄的對應表。當使用者需要尋找 student_id 為 12022 的資料的時候,系統先在 student_id 索引上找到該記錄,然後透過對映表直接找到資料行,並且傳回該行資料。因為掃描索引的速度一般遠大於掃描實際資料行的速度,所以採用索引的方式可以大幅提高資料庫的工作效率。

簡而言之,不使用索引,MySQL 就必須從第一筆記錄開始讀取完整個表,直到找出相關的行。表越大,查詢資料所花費的時間就越多。如果表中查詢的欄位有索引,MySQL 就能快速到達一個位置去搜尋資料文件,而不必查看所有數據,這樣將會節省很大一部分時間。

索引的優缺點

索引有其明顯的優勢,也有其不可避免的缺點。

優點

索引的優點如下:

  • 透過建立唯一索引可以保證資料庫表中每一行資料的唯一性。

  • 可以為所有的 MySQL 欄位類型設定索引。

  • 可以大幅加快資料的查詢速度,這是使用索引最主要的原因。

  • 在實現資料的參考完整性方面可以加速表與表之間的連接。

  • 在使用分組和排序子句進行資料查詢時也可以顯著減少查詢中分組和排序的時間

缺點

增加索引也有許多不利的方面,主要如下:

  • #建立和維護索引組要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。

  • 索引需要佔磁碟空間,除了資料表佔資料空間以外,每個索引還要佔一定的實體空間。如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案尺寸。

  • 當資料表中的資料增加、刪除和修改的時候,索引也要動態維護,這樣就降低了資料的維護速度。

使用索引時,需要綜合考慮索引的優點和缺點。

索引可以提高查詢速度,但會影響插入記錄的速度。因為,在有索引的表中插入記錄時,資料庫系統會依照索引進行排序,這樣就降低了插入記錄的速度,插入大量記錄時的速度影響會更加明顯。在這種情況下,最好的方法是先刪除表中的索引,然後插入數據,插入完成後,再建立索引。

以上是索引是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn