mysql学习
索引原理
想理解索引原理必须清楚一种数据结构,平衡树(非二叉树),b tree或者 b+ tree,也有用hash桶做数据结构。
我们平时的表会加上索引,建表的时候如果不指定主键,数据库会拒绝建表语句的执行,加上了主键,磁盘上的存储结构由整齐排列的结构变成了树状结构,也就是变成了一个索引。就是所谓的聚集索引。
这样就经过三次查找就能找到了,但是会降低写,因为增删改都会破坏树结构,重新平衡。
非聚集索引,就是非主键的其他字段加索引,索引之间互不关联
聚集索引和非聚集索引的区别在于,通过聚集索引可以查到需要查找的数据,非聚集索引可以查到记录对应的主键值,再使用主键的值通过几句索引查找到需要的数据。
如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
如果数据表主要用来插入和查询记录,读操作明显多于写操作,存储量较大,则MyISAM引擎能提供较高的处理效率
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
MVCC机制支持并发:读不加锁,读写不冲突。
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),没开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID
具体实现MVCC实现