索引被用来快速找出在一个列上用一特定值的行。没有索引,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列以前的不一样,它是排序的,缘由正式如上所述。索引