面试--01

1.连接与释放连接

连接

 

 

 

释放

 

 

 

 

 

 2.乐观锁和悲观锁

 

 

 

 

 

 

 

 mysql最左匹配原则

 3.mysql引擎InnoDB

   

 

 

 

 

 

 

Innodb与myisam的区别



1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;

3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

 

辅助索引

辅助索引的叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签(bookmark)。该书签用来告诉InnoDB存储引擎哪里可以找到与索引相对应的行数据。书签就是相应行数据的聚集索引键(主键)。

InooDB引擎必须要有主键,因为整个引擎都是以主键构成的B+Tree结构而存在的。如果我们不指定主键,mysql会自动给我们创建一个隐藏的主键。
InooDB的主键最好设置成:与业务无关且自增。 我们观察BTree的结构,一旦插入值,这个结构就要重建,很费时,如果主键是自增的,可以减少插入数据时BTree树的更新时间(降低数据写入的时间)。
辅助索引如果不手动创建,MySQL是不会帮我们创建的,如果没有辅助索引,我们通过name来找数据的时候,搜索复杂度是O(n),非常耗时。(因为辅助索引是用的ASCLL码,相当于主键id,在给name找数据时,可以用到b+树的特性)。
辅助索引并不是越多越好。 我们观察整个搜索流程会发现,辅助索引通过牺牲空间的方式来提升查询速度,如果辅助索引过多,必然会造成空间的浪费。

 

 

 

 

 

 

posted @ 2021-06-03 11:57  所在丶  阅读(36)  评论(0编辑  收藏  举报