myisam 和 innodb
- 第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
- myisam的主键索引,索引着数据块地址,其他索引也是索引着数据块地址 --》 非聚簇索引
- innodb的主键索引,索引和数据是一起的(非数据块地址),其他索引直接索引着主键的值(也就是innodb所有的辅助索引都引用主键 作为data域)–》聚簇索引
- 不管是myisam还是innodb 他们索引用的都是b+tree结构
覆盖索引
- A表中有四个字段ID,USER_NAME,PHONE,EMAIL,ADDR,
- 第一种情况对USER_NAME建立索引
- select phone from A where user_name=“user”
- 需要进行回表
- 第二种情况对user_name 和 phone 建立索引
- select phone from A where user_name=“user”
- 这个不需要回表,而是直接在命中索引的时候返回phone的值