MySQL 索引简介
索引也叫“键”(key),是存储引擎用于快速找到记录的一种数据结构。
索引对于良好的性能非常关键。数据量越来越大的时候,索引的重要性也会体现出来。
例如下面的sql:
Select * from user where userid=123;
如果没有创建索引,此时查询会全表扫描
如果在userid字段创建了索引,会根据索引来进行查询。
下面对于同样的语句使用explain 进行执行计划分析。
下图是未创建索引时的执行计划,可以看到type是all,key对应的内容为空,说明没有索引或者未命中索引。
下图是创建了userid的索引的执行计划,可以看到type是ref,possible_keys 是推测的索引名称,Key是索引名称。这样会减轻很多查询的压力。
MySQL 索引碎片
在数据表使用很长时间后,表上的B-Tree索引可能会碎片化,会降低查询的效率。碎片化的索引可能会以很差或者无序的方式存储在磁盘上。
如下图,是未经优化的数据表的使用情况。