MySQL覆盖索引

大部分的索引存在的意义在于更多的筛除非目标数据,更快的定位所需的数据行,而覆盖索引主要的目的不是加快查询的速度,而是偏向于去除读取数据行的时间,而将需要的列放在索引的叶子节点中,命中后直接返回,哈希索引,空间索引,全文索引无法作为覆盖索引

优势:

  1. 由于数据的部分重复,索引文件基本上会比数据文件的条数要少,减少了数据访问
  2. 索引文件的存储是按照顺序进行,在进行范围查询的时候命中的页更少
  3. 例如MyISAM引擎,索引数据的缓存是在MySQL的内存中进行,而数据文件的缓存是由操作系统执行,覆盖索引避免了一次数据调用
  4. 在InnoDB引擎中,主键或者默认第一个非空列会定义为聚簇索引,二级索引保存的是数据文件的主键值,通过二级索引访问数据还需要定位数据行,覆盖索引可以避免二次查询