数据表类型(存储引擎)数据库引擎用于存储、处理和保护数据核心服务,使用数据库引擎控制访问权限和快速处理事务,使用数据库引擎创建用于在线事务处理或在线分析处理数据的关系数据库,包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(索引、视图、存储过程)。常用引擎对比特性MyisamInnoDBMemoryBDBArchivestoragelimit***64TB是否有事务安全-支持-支持-锁机制表锁行锁表锁页锁行锁B树索引支持支持支持支持-哈希索引-支持支持--全文索引支持----簇索引-支持---数据缓存-支持支持--索引缓存SupportSupportSupport--DataCompressionSupport---SupportSpaceUsageLowHighN/ALowVeryLowMemoryUsageLowHighMediumLowLow批量插入速度HighLowHighHighVeryHigh外键支持-支持---EngineFeaturesMyisammysql默认的存储引擎,存储在磁盘上的三个文件中。frm(存储表定义)。MYD(MYData存储数据)MYI(MYIndex存储索引);不支持事务,不支持行锁外键,所以insert,update的时候会锁住整张表,效率会比较低。行数存储在MyIASM中。如果表的读操作远大于写操作,又不需要事务,则首选MyISAM。索引1.MyISAM引擎的索引结构是B+Tree,B+Tree的data字段存放的是实际数据地址,即索引与实际数据分离,即非聚集索引。2、如图所示,主键索引和辅助索引结构一直都是,但是主键索引要求键是唯一的。3、MyISAM中的索引检索算法首先安装B+Tree搜索算法进行索引的检索。如果key存在,则取出数据域的值,然后以数据域的值作为地址,读取对应的数据记录。Innodb提供了对数据库ACID事务的支持,实现了SQL标准的四个隔离级别,提供了行级锁和外键约束。当Mysql运行时,Innodb会在内存中建立一个缓冲池来缓冲数据和索引。该引擎不支持全文类型索引,不保存表的行数。从表中选择count(*)以扫描整个表。需要事务操作时,Innodb有保障,锁力小,写操作不会锁token,所以Innodb引擎在并发高的时候效率更高。与Myisam相比,写入处理效率较差,会占用更多的磁盘空间来保存数据和索引。.索引1.Innodb索引使用的是B+Tree,Innodb索引文件本身就是一个数据文件,即B+Tree的数据域存放的是实际数据,如图,PrimaryKey就是聚簇索引.这个索引的key是数据表的主键,Innodb表本身就是主索引。2.Innodb辅助索引数据字段存储的是对应主键的值,而不是地址。通过辅助索引查找时,先找到主键,再通过主键查找数据。所以不建议主键太长,否则辅助索引会变得很大。3.Innodb必须有主键。如果不指定,Mysql会自动选择一条唯一标识的数据记录作为主键。4、聚簇索引按主键查找效率很高,辅助索引要查找两次。5.基于Innodb索引结构,可以解释为什么不建议使用太长的主键,为什么不建议使用非单调(非递增)记录作为主键,以及B+Tree索引结构使得使用非单调主键非常低效。常用命令显示引擎;从mytest查看当前支持的引擎和默认引擎显示表状态;显示创建表表名;查看数据表引擎修改默认引擎my.ini[mysqld]添加default-storage-engine=InnoDB名词概念ACID:(Atomicity)原子性,要么全部执行,要么不执行;(Consistency)一致性,事务的运行不会改变数据库中数据的一致性;(Isolation)独立性,又称隔离两种或两种以上的食物不会交错执行的状态;(Durability)持久化,事务执行成功后,数据被持久化。BTree二叉搜索树1.所有非叶子点最多有两个子节点(左右)2.所有节点存储一个关键字3.非叶子节点的左指针指向比其关键字小的子树,并且右指针指向大于其关键字的子树关键字子树的二叉树搜索:从根节点开始查询关键字是否等于该节点,返回***。否则查询键小于节点,转到左子节点,否则转到右子节点。如果左侧或右侧为空,则未找到反馈。如果树的左右节点是平衡的,如图1所示,三棵树的查询性能接近于二分查找。tree相对于二分查找的优势在于数据更新的时候不需要移动大块的内存数据,比如图3和图4的数据更新,一系列的更新之后,可能会导致图的BTree树2、树搜索变成线性,没有查询优势。在实际使用中,通常采用如图1和图3所示的平衡二叉树,即“平衡二叉树”。平衡算法是B树中的一种插入和移除节点的策略。B-Tree多路搜索树(非二叉树)1.任何非叶子节点至多有M个子节点且M>22。根节点的子节点个数为[2,M]3.除根节点外的非叶子节点子节点树为[M/2,M]4.每个节点至少存储M/2-1(向上取整)最多M-1个关键字(至少2个关键字)5.非叶子节点的key字数=儿子指针数-16.非叶子节点关键字:K[1],K[2],...,K[M-1]andK[i]
