您的当前位置:首页 >域名 >MySQL原理介绍,你学会了吗? 正文
时间:2025-11-04 08:06:03 来源:网络整理编辑:域名
一、Mysql中有哪几种锁?1)表级锁开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2)行级锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
开销小,加锁快;不会出现死锁;锁定粒度大,理介发生锁冲突的绍学概率最高,并发度最低。理介
开销大,绍学加锁慢;会出现死锁;锁定粒度最小,理介发生锁冲突的绍学概率最低,并发度也最高。理介
开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,绍学并发度一般。理介
根据存储方式的理介不同,MySQL 中常用的绍学索引在物理上分为 B-树索引和 HASH 索引两类,两种不同类型的理介索引各有其不同的适用范围。
1、B-Tree索引它使用B-Tree数据结构来存储数据,实际上很多存储引擎使用的是B+Tree。B+Tree和B-Tree的不同点在于:
非叶子节点只存储键值信息所有叶子节点之间都有链指针数据记录都存放在叶子节点中B-Tree是为磁盘等外存储设备设计的一种平衡多路查找树。B-Tree模型(InnoDB):

B+Tree模型(InnoDB):

B-树索引的特点:
所有键值分布在整个树中任何关键字出现且只出现在一个节点中搜索有可能在非叶子节点结束在关键字全集内做一次查找,性能逼近二分查找算法B+树索引与B-树索引的企商汇不同在于:
非叶子节点只存储键值信息。所有叶子节点之间都有一个链指针。数据记录都存放在叶子节点中。B+Tree对比BTree的优点:
磁盘读写代价更低那么提升查找速度的关键就在于尽可能少的磁盘I/O,那么可以知道,每个节点中的key个数越多,那么树的高度越小,需要I/O的次数越少,因此一般来说B+Tree比BTree更快,因为B+Tree的非叶节点中不存储data,就可以存储更多的key。
查询速度更稳定由于B+Tree非叶子节点不存储数据(data),因此所有的数据都要查询至叶子节点,而叶子节点的高度都是相同的,因此所有数据的查询速度都是一样的。
2、HASH 索引哈希(Hash)一般翻译为“散列”,也有直接音译成“哈希”的免费源码下载,就是把任意长度的输入(又叫作预映射,pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。哈希索引也称为散列索引或 HASH 索引。MySQL 目前仅有 MEMORY 存储引擎和 HEAP 存储引擎支持这类索引。其中,MEMORY 存储引擎可以支持 B-树索引和 HASH 索引,且将 HASH 当成默认索引。HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行。哈希索引的最大特点是访问速度快,但也存在下面的一些缺点:MySQL 需要读取表中索引列的值来参与散列计算,散列计算是一个比较耗时的操作。也就是说,相对于 B-树索引来说,WordPress模板建立哈希索引会耗费更多的时间。不能使用 HASH 索引排序。HASH 索引只支持等值比较,如“=”“IN()”或“<=>”。HASH 索引不支持键的部分匹配,因为在计算 HASH 值的时候是通过整个索引值来计算的。根据索引的具体用途,MySQL 中的索引在逻辑上分为以下 5 类:
1、普通索引普通索引是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。普通索引允许在定义索引的列中插入重复值和空值。创建普通索引时,使用的关键字是 INDEX。【示例】
复制CREATE INDEX index_id ON tb_student(id);1. 2、唯一索引唯一索引与普通索引类似,不同的是创建唯一性索引的目的不是为了提高访问速度,而是为了避免数据出现重复。唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。创建唯一索引使用 UNIQUE INDEX 关键字。【示例】
复制CREATE UNIQUE INDEX index_id ON tb_student(id);1. 3、主键索引顾名思义,主键索引就是专门为主键字段创建的索引,也属于索引的一种。主键索引是一种特殊的唯一索引,不允许值重复或者值为空。创建主键索引通常使用 PRIMARY KEY 关键字。不能使用 CREATE INDEX 语句创建主键索引。4、全文索引全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。在 MySQL 中只有 MyISAM 存储引擎支持全文索引。全文索引允许在索引列中插入重复值和空值。不过对于大容量的数据表,生成全文索引非常消耗时间和硬盘空间。创建全文索引使用 FULLTEXT INDEX 关键字。【示例】
复制CREATE FULLTEXT INDEX index_info ON tb_student(info);1.其中,index_info 的存储引擎必须是 MyISAM,info 字段必须是 CHAR、VARCHAR 和 TEXT 等类型。
5、空间索引空间索引是对空间数据类型的字段建立的索引,使用 SPATIAL 关键字进行扩展。创建空间索引的列必须将其声明为 NOT NULL,空间索引只能在存储引擎为 MyISAM 的表中创建。空间索引主要用于地理空间数据类型 GEOMETRY。对于初学者来说,这类索引很少会用到。创建普通索引时,使用的关键字是 SPATIAL INDEX。【示例】
复制CREATE SPATIAL INDEX index_line ON tb_student(line);1.示例
复制CREATE INDEX index_addr ON tb_student(address(4));1. 2、多列索引组合索引也称为复合索引或多列索引。相对于单列索引来说,组合索引是将原表的多个列共同组成一个索引。多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。示例
复制CREATE INDEX index_na ON tb_student(name,address);1.

原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,才算整个事务成功。事务中任何一个 SQL 语句执行失败,已经执行成功的 SQL 语句也必须撤销,数据库状态应该退回到执行事务前的状态。
一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
一个事务的影响在该事务提交前对其他事务都不可见——这通过锁来实现。
四种隔离级别Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容,脏读,不可重复读)
一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
Repeatable Read(可重读)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
事务一旦提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。
主从同步过程中主服务器有一个工作线程I/O dump thread,从服务器有两个工作线程I/O thread和SQL thread。

异步复制是MySQL默认方式,主库写入binlog日志后即可成功返回客户端,无须等待binlog日志传递给从库的过程,但是一旦主库宕机,就有可能出现丢失数据的情况。
2、半同步复制MySQL默认的复制方式是异步复制,但是当主库宕机,在高可用架构做准备切换,就会造成新的主库丢失数据的现象。MySQL5.5版本之后引入了半同步复制,但是主从服务器必须同时安装半同步复制插件。在该功能下,确保从库接收完成主库传递过来的binlog内容已经写入到自己的relay log后才会通知主库上面的等待线程。如果等待超时(超时参数:rpl_semi_sync_master_timeout),则关闭半同步复制,并自动转换为异步复制模式,直到至少有一台从库通知主库已经接收到binlog信息为止。半同步复制提升了主从之间数据的一致性,让复制更加安全可靠,在5.7 版本中又增加了rpl_semi_sync_master_wait_point参数,用来控制半同步模式下主库返回给session事务成功之前的事务提交方式。热备份:热备份指的是当数据库进行备份时, 数据库的读写操作均不受影响
温备份:温备份指的是当数据库进行备份时, 数据库的读操作可以执行, 但是不能执行写操作
针对不同的场景下, 我们应该制定不同的备份策略对数据库进行备份, 一般情况下, 备份策略一般为以下几种:
直接cp,tar复制数据库文件(物理备份,冷备):适合数据量小。lvm2快照+复制BIN LOGS(逻辑备份,热备):适合数据量一般,使用lvm2的快照对数据文件进行备份, 而后定期备份BINARY LOG达到增量备份的效果。mysqldump+复制BIN LOGS(逻辑备份,热备):适合数据量中等,先使用mysqldump对数据库进行完全备份, 然后定期备份BINARY LOG达到增量备份的效果。xtrabackup(逻辑备份,热备):适合数据量很大,使用xtrabackup进行完全备份后, 定期使用xtrabackup进行增量备份或差异备份。所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。
产生死锁的四个必要条件:
互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
【原因】
死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。
【解决】
那么对应的解决死锁问题的关键就是:让不同的session加锁有次序。
最大限度的降低死锁方法:
按同一顺序访问对象。避免事务中的用户交互。保持事务简短并在一个批处理中。使用低隔离级别。使用绑定连接。电脑扬声器没有声音的设置方法(解决电脑扬声器无声的问题,让音频正常播放)2025-11-04 07:56
探究索尼HT-MT300的音质与性能(一款高性能的家庭音响系统)2025-11-04 07:54
昂达ondav801s的性能与使用体验(一款性能卓越的平板电脑,给你全新的视觉享受)2025-11-04 07:31
iPhone7相较于iPhone6s的优势与差异(性能、摄影和外观方面的重大改进使iPhone7成为首选)2025-11-04 07:27
溥仪生育能力缺失的原因及其治疗探究(溥仪无法生育的原因解析及相关疗法研究)2025-11-04 06:41
中兴MemoIIM901C(探索中兴MemoIIM901C的高性能和多功能特点)2025-11-04 06:37
AMD八核FX8300(领先性能与实惠价格的完美结合,为你带来无限可能)2025-11-04 06:20
飞利浦SHB6250音质体验(探索SHB6250无线耳机的音质表现和特点)2025-11-04 05:53
电脑凤凰系统使用技巧教程(掌握电脑凤凰系统的关键技巧,提升工作效率)2025-11-04 05:33
飞利浦SHB6250音质体验(探索SHB6250无线耳机的音质表现和特点)2025-11-04 05:20
如何使用电脑自带工具查看CPU温度(一步步教你轻松监测CPU温度,确保电脑运行稳定)2025-11-04 08:01
iOS10.3.3(让你的苹果设备更加畅快无比)2025-11-04 07:13
安卓系统)2025-11-04 07:09
海尔205STPH冰箱(一台值得拥有的现代化冰箱)2025-11-04 07:05
AOCI2779VH(探索无边界体验,颠覆传统视觉感受)2025-11-04 06:39
手动运行盘重装系统教程(学会手动运行盘重装系统,让你的电脑焕然一新)2025-11-04 06:30
康佳电视G9200U——开启视听新纪元(探秘G9200U的卓越画质与智能体验)2025-11-04 06:19
Lenovo510s主板(解析Lenovo510s主板的特点和优势)2025-11-04 05:49
电脑连接翼讯后发生错误的解决方法(翼讯连接错误、网络问题、解决方案)2025-11-04 05:32
Lenovoideapad310s14(一键开机,迅捷高效,助您无忧办公与娱乐)2025-11-04 05:19