解析:
插入缓冲(insert buffer):用于非聚索引的插入和更新操作。
先判断插入的非聚集索引是否在缓冲池中,如果在则直接插入,否则插入到 insert buffer
对象中。
再以一定的频率进行 insert buffer 和辅助索引叶子节点的 merge 操作,将多次插入合并
到一个操作中,提高对非聚集索引的插入性能。
二次写(double wirte)
由两部分组成,一部分是内存中 double wirte buffer,大小为 2MB,另一部分是物理磁盘上
共享表空间连续的 128 个页,大小也为 2MB。
在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是通过 memcpy 函数将脏页先复制
到内存中的该区域,之后通过 double wirte buffer
再分两次,每次 1MB 顺序地写入共享表空间的物理磁盘上,然后调用 fsync 函数,同步到
磁盘,避免操作系统缓冲写带来的问题。
自适应哈希索引(Adaptive hash index)
INNODB 会根据访问的频率和模式,为热点页建立哈希索引,来提高查询效率。
索引通过缓冲池的 B+树页构造而来,因此建立速度很快。
INNODB 存储引擎会监控对表上各个索引页的查询,如果观察到建立哈希索引可以带来
速度上的提升,则建立哈希索引,所以叫做自适应哈希
索引。
缓冲池
为了提高数据库的性能,引入缓冲池的概念.
通 过 参 数 innodb_buffer_pool_size 可 以 设 置 缓 冲 池 的 大 小 , 参 数
innodb_buffer_pool_instances 可以设置缓冲池的实例个数。
缓冲池主要用于存储以下内容:缓冲池中缓存的数据页类型有:
索引页、数据页、undo 页、插入缓冲、自适应哈希索引、INNODB 存储的锁信息(lock info)
和数据字典信息。
MyISAM 与 InnoDB 存储引擎的 5 大区别
解析:
INnoDB 支持事务,而 MYISAM 不支持事务
INnoDB 支持行级锁,而 MyISAM 支持表级锁
INnoDB 支持 MVCC,而 MYISAM 不支持
INNODB 支持外键,而 MYISAM 不支持
INNODB 不支持全文索引,而 MYISAM 支持
解析:
一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解(只要是关系型数据
库都满足 1NF)
二范式:2NF 是对记录的唯一性约束,要求记录中有唯一标识,即实体的唯一性。
三范式:3NF 是对字段的冗余性约束,即任何字段不能由其他字段派生出来,它要求字段没有
冗余。
没有冗余的数据库设计可以做到,但是,没有冗余的数据未必是最好的数据库,有时为了提高
运行效率,就必须降低方式标准,适当保留冗余数据。
具体做法:在概念模型设计时遵守三范式,降低范式标准的工作放到物理数据模型设计时考虑,
降低范式就是增加字段,允许冗余。
解析:
DDL(Data Definition Language):数据定义语言(create alter drop)
DML(Data Manipulation Language):数据操作语句(insert update delete select)
DTL:数据事务语句(commit collback savapoint)
DCL(Data Control Language):数据控制语句(grant revoke)
解析:
操作简单方便。视图用户完全不需要关心视图对应的表结构、关联条件、筛选条件,对用户
来说已经是过滤好的复合条件的结果集。
数据更加安全。视图用户只能访问视图中的结果集,通过视图可以把对表的访问权限限制在
某些行和列上面。
数据隔离。屏蔽了源表结构变化对用户带来的影响,源表结构变化视图结构不变。