SQL中創(chuàng )建索引的"索引"是什么意思啊?
??索引用來(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ù)的速度就越快。