MySQL学习

数据库默认隔离基本:可重复读:避免虚读,幻读,不可重复读。

1、数据库引擎

1)InnoDB 5.5以后的数据库默认引擎,特点:支持事务,行级锁,支持外键等高级特性,耗能高,并发效果好,容易产生死锁,支持索引结构BTree,聚簇索引与表空间共享存储,不对全表内容进行存储;

2)MyISAM 5.5之前的默认引擎,特点:不支持事务,表级锁,耗能小,并发效果差,不容易产出死锁,性能高,支持索引结构BTree,hash,非聚簇索引单独的文件,对全表内容进行存储;

InnoDB ---> BTree 聚集索引“主索引” 为表中的主键如果不存在主键,则数据库会判断表中的一个类似的列作为主索引,如果不                         存在则会自动创建一个长多为6个字节的长整形,由主索引获取data域即获取相应的值。辅助索引依赖与主索引,                        每 次先查出主索引在找到相应的data域获取目标值,所以辅助索引会携带主索引。

MyISAM ---> BTree 非聚集索引:索引和数据为两文件,索引中data域存放的是数据的地址。主索引key唯一和辅助索引key可以                       重复没有多少区别。

InnoDB支持hash是自适应的不能人为干预,是数据库的一种自我优化策略。

BTree支持范围查找,多列索引。hash等值查询速度优于Btree不需要多个节点之间i/o操作。

索引类型:普通索引:普通的类上创建 common;

                   唯一索引:不允许重复值,但可以为空或null;

                    主键索引:全局唯一不可为空或null;

                    全文索引(InnoDB不支持),多列索引,单列索引

锁分类:悲观锁,乐观锁,matedata lock

悲观锁:使用数据本身的锁 --> select ... from .. for update 

乐观锁:基于MVCC(多版本并发控制)理论为基础,在表设计是与实际数据多出一个列用于版本控制,缺点:增加了空间的占用,                  优点:没有使用锁,提高了性能。

数据库设计:三范式:没有冗余字段,数据空间占用小数据唯一,存在不同表之间的频繁交互效率。

                     反三范式:存在冗余字段减少不同表之间的交互,空间换时间。

 

你可能感兴趣的:(MySQL学习)