手字笔录:来自姜承尧《MySQL技术内幕InnoDB存储引擎》
一:数据库与实例区别:
1. 数据库指的是frm,MYD,MYI,ibd结尾的文件,文件的集合。
2. 实例指的是:MySQL数据库由后台线程以及一个共享内存区组成,它是程序。数据库实例是真正用于操作数据库文件的
二;存储引擎:存储引擎是基于表的,而不是数据库的,
(1):Innodb存储引擎:将数据放在一个逻辑的表空间中,4.1之后,每一个InnoDB存储的表单独存放到一个独立的ibd文件中
特点:
l 使用MVCC来获得高并发
l 实现了SQL的四种隔离级别,默认REPEATBLE级别
l 使用next-keylocking的策略来避免幻读现象的产生,
l 提供插入缓冲,二次写,自适应哈希索引,预读等高性能和高可用功能
l 使用聚集的方式,索引每张表都是按照主键的顺序进行存放,如果没有显式地在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID(以此为主键)
(2):MyISAM不支持事务,表锁设计,支持全文索引,它的缓冲池只缓存索引文件,而不缓冲数据文件(与大多数数据库都不同)。
特点;
l 表是由MYD(存放数据文件)和MYI(存放索引文件)组成,
l 可以进行压缩或者解压,但是压缩后的表是只读的。
l MySQL数据库只缓存其索引文件,数据文件交由操作系统本身来完成。
(3):NDB集群存储引擎,数据全部放在内存中,将非索引数据放在磁盘上,所以主键查找的速度极快,NDB的连接操作(JOIN)是在MySQL数据库层完成的,而不是存储引擎层
(4),Memory存储引擎;表的数据放在内存中,数据库重启或崩溃,表中的数据都将消失,适用于存储临时数据的临时表,以及数据仓库中的纬度表,
l 默认使用哈希
l 只支持表锁,并发性能差,不支持TEXT和BLOB列类型。
l 数据库使用该引擎作为临时表来存放查询的中间结果集
l 如果容量较大时,又或者中间结果含有TEXT和BLOB列类型字段,则MySQL数据会把其转换成MyISAM存储引擎表二存放到磁盘里。
(5)Archive:只支持Insert和select操作,设计的目的主要是提供高速的插入与压缩功能
l 5.1开始支持索引,
l 不是安全的存储引擎
l 使用zlib算法将数据行进行压缩(压缩比一般是1:10)后存储,适用于;存储归档数据,比如:日志信息。
l 使用行锁实现高并发的插入操作,
(6)Federated:只是指向一台远程MySQL数据库服务器上的表。
(7)Maria:设计的目的就是取代原有的MyISAM,
特点
l 支持缓存数据和索引文件
l 应用了行锁设计
l 提供了MVCC功能,支持事务和非事务安全的选项,
l 以及BLOB字符类型的而处理性能
时间如此,雨很大,从家里来学校。