手机网站跟pc网站有什么不同,百度图片搜索入口,vi设计公司[本源百纳设计,做软件的公司网站有哪些MySQL的覆盖索引
前言
当一个索引包含了查询所需的全部字段时#xff0c;就可以提高查询效率#xff0c;这样的索引又被称之为覆盖索引。
以MySQL常见的三种存储引擎为例#xff1a;InnoDB、MyISAM、Memory#xff0c;对于覆盖索引提高查询效率的方式均不同#xff0c;…MySQL的覆盖索引
前言
当一个索引包含了查询所需的全部字段时就可以提高查询效率这样的索引又被称之为覆盖索引。
以MySQL常见的三种存储引擎为例InnoDB、MyISAM、Memory对于覆盖索引提高查询效率的方式均不同
下面让我们分别讲讲
InnoDB
在InnoDB中主键索引的叶子节点存储完整的数据行称为聚簇索引而唯一索引、普通索引、联合索引的叶子节点只存储索引字段和主键值称之为二级索引。
当一条查询sql用到的索引只包含部分需要的字段时就需要先在二级索引中查到相应数据的主键字段然后根据主键字段在主键索引中查到全部数据。回到主键索引中查询数据这个就叫做回表因为一次索引查询还查不到全部数据还需要回表一次才能查到全部数据。
但是如果sql查询所需的字段全部包含在用到的索引中就可以在二级索引中直接查询到所需的全部数据不需要再回表了这种包含所需的全部字段的索引就叫做覆盖索引。
在InnoDB中覆盖索引可以减少回表的次数提高查询效率。
MyISAM
在MyISAM中索引保存的是数据值以及指向数据在磁盘中位置的指针。
当一条sql查询没有用到索引时就需要直接到磁盘中的数据文件进行搜索。
当一条sql查询用到索引的部分字段时会先在索引中查到部分字段的指针然后再到磁盘中根据指针查询到对应行再在行中查询全部所需数据。
但是如果sql查询用到的索引包含全部所需的字段时也就是用到覆盖索引时就可以直接在索引中查到全部所需字段的值不需要再进行磁盘IO。
在MyISAM中覆盖索引可以减少磁盘IO的次数提高查询效率。
Memory
在Memory中与在MyISAM中逻辑相似不过Memory是将数据存储在内存中虽然内存IO比磁盘IO快很多但使用覆盖索引仍有利于减少内存IO提高查询效率。 需要注意的是本文并未特别考虑同时使用其它索引的情况不使用覆盖索引而使用其它索引仍然可能达到同样的效果。