7.MySQL 有哪些常见存储引擎
常见的有 InnnoDB MyISAM Memory
InnnoDB: 它提供了事务、行级锁机制和外键约束的功能,也是目前MySQL默认的存储引擎 , 具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎
Memory: 这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中
MyISAM:·MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键
8. MyISAM 和 InnnoDB的区别
- 事务支持:
MyISAM不提供事务支持;InnoDB提供事务支持事务,具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全特性。 - 最小粒度锁:
MyISAM只支持表级锁,更新时会锁住整张表,导致其它查询和更新都会被阻塞InnoDB支持行级锁 - 索引类型:
MyISAM的索引为非聚簇索引,数据结构是 B 树;InnoDB的索引是聚簇索引,数据结构是 B+树。 通过 主键ID的形成的聚簇索引。 - 主键必须:
MyISAM允许没有任何索引和主键的表存在;InnoDB如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键(用户不可见) ,数据是主索引的一部分,附加索引保存的是主索引的值。 - 表的具体行数:
MyISAM保存了表的总行数,如果 select count( ) from table;会直接取出出该值;InnoDB没有保存表的总行数,如果使用 select count( ) from table - 外键支持:
MyISAM不支持外键;InnoDB支持外键
8. 聚簇索引和非聚簇索引区别
在聚簇索引的叶子节点直接存储用户信息的内存地址,我们使用内存地址可以直接找到相应的行数据。
在非聚簇索引的叶子节点上存储的并不是真正的行数据,而是主键 ID,所以当我们使用非聚簇索引进行查询时,首先会得到一个主键 ID,然后再使用主键 ID 去聚簇索引上找到真正的行数据,我们把这个过程称之为回表查询
聚簇索引和非聚簇索引最大的区别在于叶子节点存储的数据不同,聚簇索引叶子节点存储的是行数据,因此通过聚簇索引可以直接找到真正的行数据;而非聚簇索引叶子节点存储的是主键信息,所以使用非聚簇索引还需要回表查询