索引被用來快速找出在一個列上用一特定值的行。沒有索引,MySQL不得不首先以第一條記錄開始並而後讀完整個表直到它找出相關的行。表越大,花費時間越多。
若是表對於查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數據文件的中間,沒有必要考慮全部數據。若是一個表有1000 行,這比順序讀取至少快100倍。注意你須要存取幾乎全部1000行,它較快的順序讀取,由於此時咱們避免磁盤尋道。mysql
例如對下面這樣的一個student表:sql
mysql>SELECT * FROM student;
這樣,咱們試圖對它進行一個特定查詢時,就不得不作一個全表的掃描,速度很慢。
例如,咱們查找出全部english成績不及格的學生:spa
mysql>SELECT name,english FROM student WHERE english<60;
其中,WHERE從句不得不匹配每一個記錄,以檢查是否符合條件。對於這個較小的表也許感受不到太多的影響。可是對於一個較大的表,例如一個很是大的學校,咱們可能須要存儲成千上萬的記錄,這樣一個檢索的所花的時間是十分可觀的。
若是,咱們爲english列建立一個索引:code
mysql>ALTER TABLE student ADD INDEX (english) ;
再執行下述查詢:blog
mysql>SELECT name,english FROM user WHERE english<60;
結果爲:排序
能夠發現,這個結果與未索引english列以前的不一樣,它是排序的,緣由正式如上所述。索引