数据库——常用存储引擎

:主要作用是管理共享资源的并发访问,还可以用于实现事务的隔离性。

锁的类型:

    共享锁(也称读锁)

    独占锁(也称写锁)

阻塞:一个事务中的锁需要等待另一个事务中的锁释放所占用的资源,这样会形成阻塞。

死锁:两个及以上事务在执行过程中相互占用了对方等待的资源而产生的异常

数据库系统会在死锁的事务中,找到一个占用资源最少的事务进行回滚操作,从而自动解决死锁。

 

MyISAM

MySQL5.5 之前版本默认存储引擎。其特性有:

   1.并发性与锁级别:使用的是表级锁,对其修改需要加锁,读写也需要加共享锁。

   2.表损坏修复:对意外关闭的表可以进行检查和修复,并不是事务恢复,所以可能引起数据丢失。

     check table tablename

     repair table tablename

   3.MyISAM表支持数据压缩

  适用场景:

    1. 非事务型应用

    2. 只读类应用:共享锁之间不会被阻塞

    3.空间类应用:例如GPS数据等的计算

 

Innodb

MySQL5.5 及之后版本默认存储引擎。其特性有:

    1.支持事务,完全支持事务的ACID特性

         为了实现事务的原子性,一致性,持久性,innodb 使用了两个日志类型来实现:Redo Log(持久性) 和 Undo Log

    2.有自己的表空间

    3.支持行级锁,执行写操作时需要的资源更好,可以最大程度的支持并发,其行级锁是由存储引擎层实现的

 

还有很多别的存储引擎,例如等:

CSV: 可以将CSV文件作为MySQL表来处理。

Archive:可以对表数据进行压缩

 

   

### MySQL存储引擎使用的主要数据结构 #### InnoDB存储引擎的数据结构 InnoDB作为MySQL最常用的事务型存储引擎之一,采用了复杂的内部数据结构来实现高效的数据管理和检索。其中最关键的是其基于B+树构建的聚簇索引(Clustered Index),这种设计使得每张表都按照主键顺序物理存放在磁盘上[^2]。 对于非叶子节点而言,仅保存用于导航的信息;而对于叶子节点,则不仅包含了指向下一层级页面指针,还携带了完整的行记录信息。这意味着当访问某一行的具体内容时,可以直接定位到对应的页位置并加载整个记录集,从而减少了I/O操作次数,提高了查询效率。 此外,在辅助索引(Secondary Indexes)方面,虽然同样遵循B+树原则建立,但是与MyISAM不同之处在于:为了保持一致性,每次通过次级索引来获取一条记录的时候都需要额外经历一次回表过程——即先利用次级索引找到相应的主键值,然后再依据该主键去聚簇索引中精确匹配目标行的位置[^3]。 ```sql CREATE TABLE example ( id INT NOT NULL, name VARCHAR(50), PRIMARY KEY (id) ) ENGINE=InnoDB; ``` 此代码创建了一个名为`example`的表格,并指定它使用InnoDB作为默认存储引擎。这里定义了整数类型的字段`id`为主键,这将自动成为这张表内唯一且不为空的一列,同时也决定了后续所有新增加的数据项都将被组织成一棵以`id`为关键字排列起来的大规模平衡二叉查找树(B+Tree)。 #### MyISAM存储引擎的数据结构 相比之下,MyISAM则更倾向于简单直接的设计理念。它的主要特点是拥有独立于表之外管理元数据和索引文件的能力,允许更高的并发度以及更快捷只读场景下的表现。然而由于缺乏对ACID特性的支持,所以在面对复杂应用场景特别是涉及到频繁更新或删除操作的情况下显得力不从心[^1]。 具体来说,MyISAM中的每一行都会被打包进固定长度的空间里以便快速随机访问,而所有的索引都是单独维护在一个`.MYI`扩展名结尾的文件之中。值得注意的是,尽管存在多个不同的索引类型可供选择(比如全文本、空间等),但它们本质上还是围绕着静态哈希表或是传统意义上的B-tree展开工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值