MYSQL
文章平均质量分 92
Yi Ian
这个作者很懒,什么都没留下…
展开
-
MySQL中,当update修改数据与原数据相同时会再次执行吗?
在binlog_format=statement和binlog_row_image=FULL时,InnoDB内部认真执行了update语句,即“把这个值修改成 (1,999)“这个操作,该加锁的加锁,该更新的更新。在binlog_format=row和binlog_row_image=FULL时,由于MySQL 需要在 binlog 里面记录所有的字段,所以在读数据的时候就会把所有数据都读出来,那么。原创 2023-07-22 15:00:00 · 360 阅读 · 0 评论 -
缓存(redis)与数据库(MYSQL)数据一致性问题
在文章中,仔细的学习了一些MYSQL数据库的知识。但是,随着我们的业务越来越好,那么我们不可能直接去操作MYSQL数据库。因为直接去操作MYSQL终究会有比较多的I/O操作,而使整个系统的性能最终受到数据库I/O的制约而无法承载。所以,我们一般会给服务器加入缓存,这样客户端的操作可以直接操作缓存,从而减轻数据库的压力。而NOSQL中的redis比较常用的场景就是作为缓存。当我们引入缓存之后,怎么样去更新缓存和数据库的数据呢?原创 2023-01-12 16:31:00 · 1542 阅读 · 0 评论 -
MYSQL 主从复制 --- binlog
在谈主从复制之前,应该都会有一个疑问,那么就是一个MYSQL数据库存在的问题呢?1. 读和写所有压力都由一台数据库承担,压力大2. 数据库服务器磁盘损坏则数据丢失,单点故障为了解决我们可以使用MYSQL的主从复制处理,那么什么是主从复制呢?原创 2022-12-15 20:00:00 · 2826 阅读 · 0 评论 -
MySQL中Innodb 存储引擎的Buffer Pool详解
Buffer Pool即缓冲池(简称BP),BP以Page页为单位,缓存最热的数据页(data page)与索引页(index page),Page页默认大小16K,BP的底层采用链表数据结构管理Page。InnoDB 会把存储数据划分为若干个页,磁盘与内存交互是以页为基本单位,一页默认为16kB。因此,Buffer Pool 是以页为划分的。在MYSQL 启动时,原创 2022-12-26 21:52:48 · 1239 阅读 · 0 评论 -
MYSQL之两阶段提交和组提交(数据一致性)
3. 到了InnoDB中,会先开启事务,并在InnoDB 层更新记录前,首先会在undo log中做相应的记录,即通过生产一条undo log把更新的列的旧值记下来,undo log 会写入 Buffer Pool 中的 Undo 页面,不过在修改该 Undo 页面前需要先记录对应的 redo log,所以。,修改数据页面的过程是修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页,为了减少磁盘I/O,不会立即将脏页写入磁盘,后续由后台线程选择一个合适的时机将脏页写入到磁盘。原创 2023-01-03 17:38:20 · 1797 阅读 · 1 评论 -
MySQL 的日志(undo log、redo log、binlog)
WAL(Write Ahead Log)预写日志,指的是 MySQL 的写操作并不是立刻更新到磁盘上,而是先记录在日志上,然后在合适的时间再更新到磁盘上。也是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。原创 2022-12-08 19:00:00 · 1268 阅读 · 0 评论 -
MYSQL 事务、事务隔离级别和MVCC,幻读
事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。事务实现的主要两种方式:自动提交和手动提交, mysql默认是自动提交的。这两个方式实现如下:在MYSQL中事务是由引擎来实现的,因此并不是所有引擎都支持事务,如MYSQL的InnoDB 引擎是支持事务的,而 MyISAM 引擎是不支持事务的。事务看起来感觉简单,但必须遵守ACID 特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。这A原创 2022-12-01 19:15:00 · 1092 阅读 · 2 评论 -
MYSQL查询执行过程
MySQL逻辑架构整体分为三层,分别是客户端层,核心服务层,存储引擎层:客户端层:客户端层是最上层,主要处理连接处理、授权认证、安全等功能,并非MYSQL特有核心服务层:核心服务层主要处理查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)、存储过程、触发器、视图等存储引擎层:负责MySQL中的数据存储和提取。核心服务层通过API与其通信。原创 2022-11-10 17:30:00 · 1908 阅读 · 0 评论 -
MYSQL索引数据结构----B+树
我们在考虑数据结构的时候,应该首先要知道数据存放在哪里?而MYSQL的数据是持久化的,所以其数据(数据记录+索引)应该是保存在磁盘里面的。因此当我们要查询某条数据记录时,就会先从磁盘中读取索引到内存中,然后再通过内存索引数据找到该条记录在磁盘的某个位置上,最后将其读到内存中。所以查询过程中会发生多次磁盘I/O,而I/O越多耗时越长。所以,我们索引数据结构应该要尽可能少的磁盘的 I/O 操作就能完成查询工作。另外,MySQL 是支持范围查找的,所以索引的数据结构不仅要能高效地查询某一个记录,而且也要能高效地执原创 2022-11-24 19:45:00 · 1624 阅读 · 0 评论 -
MYSQL索引详解和优化
索引的定义 索引分类 数据结构分类 B+tree索引 Hash索引 Full-text索引 物理存储分类 聚簇索引(主键索引)二级索引(辅助索引) 字段特性分类 主键索引 唯一索引 普通索引 前缀索引 字段个数分类 单列索引 联合索引 创建索引的条件 索引优化方法 索引操作 创建索引 查看索引 删除索引原创 2022-11-17 18:30:00 · 863 阅读 · 0 评论 -
MYSQL的社死----死锁
在MySQL5.7版本中,也可以使用sys.innodb_lock_waits试图查看,但是在MySQL8.0中,该视图连接查询的表不同(把之前版本中使用的information_schema.innodb_locks表和information_schema.innodb_lock_waits)表替换为了performance_schema.data_locks和performance_schema.data_lock_waits)表。当然了,我们最好的策略那就是在自己的业务上预防死锁的出现。原创 2022-10-31 18:30:00 · 1548 阅读 · 0 评论 -
MYSQL锁的探索
更高版本的mysql,在范围查找,就会继续往后找存在的记录,也就是会找到 id = 16 这一行停下来,然后加 next-key lock (8, 16],但由于 id = 16 不满足 id < 9,所以会退化成间隙锁,加锁范围变为 (8, 16),所以会话 1 这时候主键索引的锁是记录锁 id=8 和间隙锁(8, 16)2.然后因为是非唯一索引,且查询的记录是存在的,所以还会加上间隙锁,规则是向下遍历到第一个不符合条件的值才能停止,因此间隙锁的范围是(8,16)update ... set ....;原创 2022-10-24 17:17:29 · 1244 阅读 · 0 评论 -
MySQL数据库优化总结
索引的优化只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引尽量使用短索引,如果可以,应该制定一个前缀长度对于经常在where子句使用的列,最好设置索引,这样会加快查找速度对于有多个列where或者order by子句的,应该建立复合索引对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索引尽量不要在列上进行运算(函数操作和表达式操作)尽量不要使用not in和操作sql语句的优化。原创 2022-10-18 19:00:00 · 668 阅读 · 0 评论