索引可以提高查询的速度,但是并不是索引越多越好。每个额外的所以都需要占用额外的空间,并且写操作的性能。修改表的内容时,索引必须进行更新,有时可能需要重构,索引越多,花费时间越长。此外MySQL在生成执行计划时,需要考虑各个索引,也需要花费时间,因此保持所需的索引才有利于查询优化,那么什么时候才是所需的索引呢。
1.最适合索引的列是出现在WHERE子句中的列,或连接子句中的列,可以快速匹配WHERE子句的行。
2.使用唯一索引,索引列的基数越大,索引效果越好。
3.使用短索引,如果对字符串索引,应该指定一个前缀长度,比如一个字段为VARCHAR(100),如果前10个或者20个字符多数为唯一的,指定索引时,可以使用VARCHAR(20)这样能够大量的节省空间的同时,使得查询变得更快。
4.利用左前缀,在创建一个n列的索引时,实际是创建了MySQL的n个索引,多列索引可起几个索引的作用,因此可使用索引列中最左边的列集匹配行,这样的列集成为左前缀。如果查询时有多个索引可选择,MySQL会选择能查询出最少行的索引。
5.使用join从其他表检索行。MySQL可以在列上更有效的使用索引,如果他们有相同的类型和大小。VARCHAR和CHAR被当成相同的类型如果他们的长度一样。