简介:
我刚上大学的时候就学数据库了,那时候还是sqlserver和db2,等我参加工作的时候接触了mysql,那时候只知道mysql存储,具体怎么存储以及对其内部了解很少,本篇主要是对于mysql的常用存储引擎来进行深度讲解。
面试点:你知道mysql有哪些存储引擎?
▪InnoDB:MySQL5.5.8之后默认的事务型引擎。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
▪MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩等,但MyISAM并不支持事务,缺陷是崩溃后无法安全恢复。尽管这样,它并不是一无是处的。对于只读的数据,或者表比较小,可以忍受修复操作,则依然可以使用MyISAM。
▪NDB:是一个集群存储引擎,特点是将数据全部放在内存中(5.1之后可以放到磁盘上),因此查找速度快,高可用,高性能。
面试点:那你说说mysql存储引擎的差异?
▪事务:数据库系统与文件系统最大的区别就是事务
InnoDB支持事务主要是面向OLTP应用。
MyISAM不支持事务,并不是所有的系统都需要支持事务,比如在数仓中,如果只是简单报表查询。
▪ 锁的粒度:
InnoDB支持行锁
MyISAM支持表锁
▪ 存储结构:
InnoDB将数据放到一个独立的idb文件,对于表中的数据,采用了聚集的方式,因此每张表的存储都是按主键的顺序进行存放。索引和数据同时放到缓存中。通过预读的方式将页数据放到缓冲池(后面深入讲解缓冲池)
MyISAM存储引擎表是由MYD(数据)和MYI(索引)组成,MySIAM在内存中只存放索引,数据还是在磁盘上的。
▪ 表的具体行数:
InnoDB不保存具体的行数,select count(*) from t 是,需要全表扫描
MyISAM会记录表的数据的总数,如果带where条件就和 InnoDB一样
▪ 其它:
InnoDB支持MVCC、支持外键、提供一致性非锁定读,同时设计成最有效的利用cpu和内存。
▪ InnoDB关键特性:
插入缓冲(Insert Buffer)
两次写 (Double Write)
自适应哈希索引(Adaptive Hash Index)
异步IO (Async IO)
刷新邻接页(Flush Neighbor Page)
大家好,我是山虎,喜欢数学,编码,算法,股票,AI。经历过一次失败的创业。东西不要死记硬背,要做到自己真正的理解。年轻人就要折腾,年轻人就要折腾,年轻人就要折腾。原创不易,帮忙转发。