索引是数据结构。它能帮助MySQL更有效率的获取数据。它对于好的性能是决定性的因素,但是人们常常忘记使用它们或者没有正确的理解它们,因此在现实的例子中,索引总是引起性能问题。这就是我们把索引放在这本书的较早部分的原因。甚至把索引这章放在语句优化之前。
索引(在MySQL中也叫做键(keys))在数据越来越大的时候,变的格外重要。数据量小,没有高的负载的情况下,在没有索引的情况下,数据库也可以表现的很好,但是随着数据量的增大,性能下降还是非常厉害的。
最简单的理解MySQL索引的工作方式就是思考下这本书的索引。你可以通过此书的索引,很容易找到你需要的内容。并且可以知道内容的页码。
MySQL使用索引的方式也是相类似的。它查找了值的索引数据结构。当它找到一个匹配,它就能找到包含这个匹配的行。假如你运行一下的语句:
mysql> SELECT first_name FROM sakila.actor WHERE actor_id = 5;
在actor_id上会有一个索引,所以MySQL使用索引来查找actor_id为5的行。换句话说,它通过索引来查找值,并且返回包含这些指定值的任意的行。
一个索引包含的值是来自于一个表中指定的列或者一些列。如果你索引超过1列的话,列的顺序就尤为重要了。因为MySQL只高效的搜索最左边前缀的索引。你将会看到,在两个列上创建一个索引和为两个列分别创建单独的索引是不同的。