
Mysql
文章平均质量分 92
Mysql底层学习
geek-wmy
一位专注的码农
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Mysql执行计划
这种情况下,需要检查WHERE语句中所使用的的列,看是否可以通过给这些列中某个或多个添加索引的方法来提高查询性能。这是查询中SELECT的序号。ref列显示了在key列记录的索引中表查找值所⽤到的列或常量,常见的有:const(常量),func,null,字段名。这列包含了MySQL解析查询的额外信息,通过这些信息,可以更准确的理解 MySQL 到底是如何执行查询的。rows列表示根据表统计信息及选用情况,大致估算出找到所需的记录或所需读取的行数,数值越小越好。查询执行的类型,描述了查询是如何执行的。原创 2024-12-05 21:20:42 · 861 阅读 · 0 评论 -
Mysql锁
由于表级锁一次会将整个表锁定,是针对非索引字段加的锁,所以可以很好的避免困扰我们的死锁问题。行级锁定最大的特点就是锁定对象的粒度很小,是针对索引字段加的锁,只对当前操作的行记录进行加锁。共享锁的特性主要是为了支持并发的读取数据,读取数据的时候不支持修改,避免出现重复读的问题。意向锁和共享锁和排它锁互斥(这里指的是表级别的共享锁和排他锁,意向锁不会与行级的共享锁和排他锁互斥)。操作,读取操作不会因此去等待记录上X锁的释放,而是会去读取行的一个快照。的行锁是针对索引字段加的锁,表级锁是针对非索引字段加的锁。原创 2024-12-05 21:20:16 · 700 阅读 · 0 评论 -
Mysql读写分离&分库分表
读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。这样的话,就能够小幅提升写性能,大幅提升读性能。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。分库就是将数据库中的数据分散到不同的数据库上,可以垂直分库,也可以水平分库。垂直分库就是把单一数据库按照业务进行划分,不同的业务使用不同的数据库,进而将一个数据库的压力分担到多个数据库。原创 2024-12-03 21:38:44 · 1327 阅读 · 0 评论 -
Mysql事务
简单来说,数据库事务可以保证多个对数据库的操作构成一个逻辑上的整体,这些数据库操作遵循着要么全部执行成功,要么全部不执行。MySQLSQL ServerOracleAtomicityIsolationDurability👉 只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A、I、D 是手段,C 是目的!而对于这四大特性,实际上分为两个部分。其中的原子性、一致性、持久化,实际上是由InnoDB中的两份日志来保证的,即redo log和undo log。原创 2024-12-03 21:38:13 · 957 阅读 · 0 评论 -
Mysql索引(二)
正因如此,红黑树的查询效率稍有下降,因为红黑树的平衡性相对较弱,可能会导致树的高度较高,这可能会导致一些数据需要进行多次磁盘IO操作才能查询到,这也是MySQL没有选择红黑树的主要原因。如果数据都存储在内存中,采用AVL树来存储,还是可以的,查询效率非常高。不过我们的数据是存在磁盘中,采用这种结构,每个节点对应一个磁盘块,数据量大的时候,也会和二叉树一样,会导致树的高度变高,这样逻辑上很近的节点实际可能非常远,无法很好的利用磁盘预读(局部性原理),会增加IO次数,所以用这种结构存储数据也是不可取的。原创 2024-12-01 10:23:44 · 859 阅读 · 0 评论 -
Mysql索引(一)
索引是存储引擎用于快速找到记录的一种数据结构。举个例子:如果查找一本书中的某个特定主题,一般会先看书的目录(类似索引),找到对应页面。在MySQL,存储引擎采用类似的方法使用索引,高效获取查找的数据。索引的分类从存储结构上来划分Btree索引(B+tree,B-tree)hash哈希索引full-index全文索引从应用层次上来划分普通索引:一个索引只包含单个列,一个表可以有多个普通索引唯一索引:索引列的值必须唯一,但允许有空值复合索引:一个索引包含多个列。原创 2024-12-01 10:08:08 · 922 阅读 · 0 评论 -
SQL执行原理
TCP 网络连接建立成功后,服务端与客户端之间会建立一个session会话,紧接着会对登录的用户名和密码进行效验,首先会查询自身的用户表信息,判断输入的用户名是否存在,如果存在则会判断输入的密码是否正确。如果我们所需要的数据是随机分散在不同页的不同扇区中,那么找到相应的数据需要等到磁臂旋转到指定的页,然后盘片寻找到对应的扇区,才能找到我们所需要的一块数据,依。假设我们已经找到了第一块数据,并且其他所需的数据就在这一块数据后边,那么就不需要重新寻址,可以依次拿到我们所需的数据,这个就叫顺序 IO。原创 2024-12-01 10:05:32 · 1017 阅读 · 0 评论 -
Mysql后台线程
在InnoDB的后台线程中,分为4类,分别是:Master Thread 、IO Thread、Purge Thread、Page Cleaner Thread。原创 2024-11-30 13:55:51 · 282 阅读 · 0 评论 -
InnoDB磁盘架构
关于MysqlInnodb引擎对底层页的一次原子访问的过程叫做。什么意思呢?我们来举一个例子,假如我们在有索引的数据表中插入一条记录,那么我们需要在Innodb引擎的聚簇索引B+树的数据页中插入这条记录,更改这条记录的上一条记录的的内容,使其指向这条记录;然后还需要在辅助索引B+树的数据页的中插入这条记录的索引信息;上边描述的这个过程就称为对底层页的一次原子访问,也就是说这次原子访问可能修改了多个数据页的信息,这个过程是不可分割的。原创 2024-11-30 13:54:53 · 1004 阅读 · 0 评论 -
InnoDB内存架构
MySQL5.5 版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。下面是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。原创 2024-11-29 15:08:04 · 876 阅读 · 0 评论 -
InnoDB逻辑存储结构
大家都知道mysql中数据是存储在物理磁盘上的,而真正的数据处理又是在内存中执行的。由于磁盘的读写速度非常慢,如果每次操作都对磁盘进行频繁读写的话,那么性能一定非常差。为了解决上述问题,InnoDB将数据划分为若干页,以页作为磁盘与内存交互的基本单位,一般页的大小为16KB。这样的话,一次性至少读取1页数据到内存中或者将1页数据写入磁盘。通过减少内存与磁盘的交互次数,从而提升性能。如果一条数据正在被使用,那么在接下来一段时间内大概率还会再被使用。可以认为热点数据缓存都属于这种思路的实现。原创 2024-11-29 14:08:24 · 1088 阅读 · 0 评论 -
Mysql数据类型
在MySQL中支持的主要整数类型是和BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。MySQL以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展。当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。原创 2024-11-03 20:46:14 · 1063 阅读 · 0 评论 -
Mysql开发规范
命名规范的对象,是指数据库SCHEMA、表TABLE、字段COLUMN、索引INDEX、约束CONSTRAINTS等。原创 2024-11-03 20:22:47 · 744 阅读 · 0 评论