索引(在MySQL中也称为键)是一种方便存储引擎快速查找行的数据结构。索引是提高性能的关键因素,当数据表很大的时候显得十分重要。通常,小型的数据库即便不使用合适的索引,性能表现得也很不错。但是随着数据量的增加,性能将直线下降。不幸的是,索引经常被忘记或者误解。因此,不重视索引是现实世界中性能问题的罪魁祸首。 索引优化也许是查询性能最有力的手段,常常能够带来数量级的性能提升,而优化后的索引则可能在较好的索引基础上再提升数倍的性能。但是需要注意,真正地使用上优化后的索引通常会需要你重写查询语句。 理解MySQL索引最简单的方式是想象一本书的目录。为了找到书中讲述的一个主题,你会首先从目录找,然后目录会告诉你具体在哪一页。在MySQL中,存储引擎使用索引的方式和书本目录类似。它首先在索引数据结构中找到一个值,一旦找到匹配的索引值就可以找到匹配的数据行。例如下面的语句: mysql>SELECT first_name FROM salila.actor WHERE actor_id = 5;
actor_id是一个索引列,因此MySQL会通过索引找到actor_id为5的行。换言之,它首先在索引中查找匹配的值,然后再返回包含指定值的数据行。 索引可以包含数据表的一个或多个列。如果索引包含超过一个列,那查询语句中WHERE条件列的顺序很重要。因为MySQL是按照最左匹配原则使用索引(即从最左的WHERE条件开始匹配)。在两个列上创建一个索引和分别在两个列创建各自独立的索引并不相同。 使用ORM是否需要关注索引?
毫无疑问,使用ORM也需要关注索引。ORM会生成逻辑和语法正确的查询语句,但很少会生成索引优化的查询语句(除非是最简单的那种查询方式,例如主键查询)。不管复杂度如何,你都不能将性能寄希望于ORM去解决索引的复杂性和巧妙性。
|