SQL中創(chuàng )建索引的"索引"是什么意思啊?

4年前 (2020-12-04)閱讀659回復0
遼源印刷廠(chǎng)
遼源印刷廠(chǎng)
  • 管理員
  • 發(fā)消息
  • 注冊排名856
  • 經(jīng)驗值80
  • 級別管理員
  • 主題16
  • 回復0
樓主

??索引用來(lái)快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹(shù)的形式保存。如果沒(méi)有索引,執行查詢(xún)時(shí)MySQL必須從第一個(gè)記錄開(kāi)始掃描整個(gè)表的所有記錄,直至找到符合要求的記錄。表里面的記錄數量越多,這個(gè)操作的代價(jià)就越高。如果作為搜索條件的列上已經(jīng)創(chuàng )建了索引,MySQL無(wú)需掃描任何記錄即可迅速得到目標記錄所在的位置。

??如果表有1000個(gè)記錄,通過(guò)索引查找記錄至少要比順序掃描記錄快100倍。

假設我們創(chuàng )建了一個(gè)名為people的表:

CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );

然后,我們完全隨機把1000個(gè)不同name值插入到people表。

??下圖顯示了people表所在數據文件的一小部分:

可以看到,在數據文件中name列沒(méi)有任何明確的次序。如果我們創(chuàng )建了name列的索引,MySQL將在索引中排序name列:

對于索引中的每一項,MySQL在內部為它保存一個(gè)數據文件中實(shí)際記錄所在位置的“指針”。

??因此,如果我們要查找name等于“Mike”記錄的peopleid(SQL命令為“SELECT peopleid FROM people WHERE name='Mike';”),MySQL能夠在name的索引中查找“Mike”值,然后直接轉到數據文件中相應的行,準確地返回該行的peopleid(999)。

??在這個(gè)過(guò)程中,MySQL只需處理一個(gè)行就可以返回結果。如果沒(méi)有“name”列的索引,MySQL要掃描數據文件中的所有記錄,即1000個(gè)記錄!顯然,需要MySQL處理的記錄數量越少,則它完成任務(wù)的速度就越快。

0
0
收藏0
回帖

SQL中創(chuàng )建索引的"索引"是什么意思啊? 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息