19.1.1.存储引擎
19.1.1.1. 概念
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、査询、 更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同 的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引 擎。存储引擎主.要有:1. Mylsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated。
19.1.1.2. InnoDB (B+树)
InnoDB底层存储结构为B+树,B树的每个节点对应innodb的一个page, page大小是固定的, 一般设为16k。其中非叶子节点只有键值,叶子节点包含完成数据。
适用场景:
19.1.1.3. TokuDB (Fractal Tree-节点带数据)
TokuDB底层存储结构为Fractal Tree,Fractal Tree的结构与B+树有些类似,在Fractal Tree 中,每一个child指针除了需要指向一个child节点外,还会带有一个Message Buffer,这个 Message Buffer是一个FIFO的队列,用来缓存更新操作。
例如,一次插入操作只需要落在某节点的Message Buffer就可以马上返回了,并不需要搜索到叶 子节点。这些缓存的更新会在査询时或后台异步合并应用到对应的节点中。
TokuDB在线添加索引,不影响读写操作,非常快的写入性能,Fractal-tree在事务实现上有优 势。他主要适用于访问频率不高的数据或历史数据归档。
MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键, 因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。
ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。在设计之初就预想数据组织 成有固定长度的记录,按顺序存储的。---ISAM是一种静态索引结构。
Memory (也叫HEAP)堆内存:使用存在内存中的内容来创建表。每个MEMORY表只实际对应 一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用 HASH索引。但是一旦服务关闭,表中的数据就会丟失掉。Memory同时支持散列索引和B树索 引,B树索引可以使用部分査询和通配査询,也可以使用<,>和>=等操作符方便数据挖掘,散列索 引相等的比较快但是对于范围的比较慢很多。
19.1.2. 索引
索引(Index)是帮助MySQL高效获取数据的数据结构。常见的査询算法,顺序査找,二分査找,二 叉排序树査找,哈希散列法,分块査找,平衡多路搜索树B树(B-tree)
19.1.2.1.常见索引原则有
1. 选择唯一性索引
1. 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。
4. 限制索引的数目:
7.删除不再使用或者很少使用的索引
8 .最左前缀匹配原则,非常重要的原则。
10 .尽量选择区分度高的列作为索引
11 .索引列不能参与计算,保持列“干净”:带函数的査询不参与索引。
12 .尽量的扩展索引,不要新建索引。