索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。
如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000 行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。
例如对下面这样的一个student表:
mysql>SELECT * FROM student;
这样,我们试图对它进行一个特定查询时,就不得不做一个全表的扫描,速度很慢。
例如,我们查找出所有english成绩不及格的学生:
mysql>SELECT name,english FROM student WHERE english<60;
其中,WHERE从句不得不匹配每个记录,以检查是否符合条件。对于这个较小的表也许感觉不到太多的影响。但是对于一个较大的表,例如一个非常大的学校,我们可能需要存储成千上万的记录,这样一个检索的所花的时间是十分可观的。
如果,我们为english列创建一个索引:
mysql>ALTER TABLE student ADD INDEX (english) ;
再执行下述查询:
mysql>SELECT name,english FROM user WHERE english<60;
结果为:
可以发现,这个结果与未索引english列之前的不同,它是排序的,原因正式如上所述。