在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行。正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,MySQL要提供高可用能力,只有最终一致性是不够的。为什么这么说呢?今天我就着重和你分析一下。这里,我再放一次上一篇文章中讲到的双M结构的主备切换流程图。图
转载
2023-08-22 21:51:10
84阅读
一、定义
索引是为了加速对表中的数据行的检索而创造的一种分散存储的数据结构
二、索引实现
mysql的索引是由存储引擎来实现,不同的存储引擎实现方式不同。这里我们只分析2种主流的引擎MyISAM(非聚集索引)和InnoDB(聚集索引)。 1、B+树中的B不是代表的二叉(Binary) ,而是代表平衡(Balance),因为B+树是从最早的平衡
转载
2023-06-24 23:42:32
391阅读
问题:请讲下mysql的事务是如何实现的分析:该问题主要考察对事务的理解及实现方式;回答要点:主要从以下几点去考虑,1、对事务的概念的理解?2、事务的实现方式? 讲到mysql的事务,很快可以想到事务的4大特性,那就是ACID,具体说来就是原子性、一致性、隔离性、持久性。也就是说事务就是围绕这4个特性来展开的。其中隔离性中又定义了隔离级别,有读未提交、读已提交、可重复度、可串行化这样4个
转载
2024-08-29 14:25:25
17阅读
在写 select 语句的时候,使用 limit, offset 可能就像是我们吃饭喝水一样自然了。刚开始工作的时候也经常听前辈们教导:使用 limit, offset,当 offset 变大的时候执行效率会越来越低。相信在前辈们的言传身教,和自己的实战过程中,大家也都知道了为什么会这样。因为 select 在执行过程中,对于存储引擎返回的记录,经过 server 层的 WHERE 条件筛选之后,
转载
2024-06-03 20:13:40
27阅读
作者:阿茂上一篇文章我们说了索引,收到有些朋友的提问,其中有这么一个问题:datetime类型的数据列索引怎么创建?我们在这里简单的说一下吧,因为datetime类型的类索引处理确实是注意下,我就说几种方式吧。最优处理办法就是把传入的datetime值转换成整型去和数据库列作比较。这样的就需要程序里面做一次转换,还有一只就是直接用时间字符串比较‘2019-11-01 13:05:13’,使用FRO
转载
2024-06-12 22:03:59
23阅读
1. 背景本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究。2. 基本概念2.1 隐藏字段在经典之作《高性能MySQL》的1.4节中提及了MySQL中MVCC的实现,原著中提及了InnoDB implements MVCC by storing with each row two additional, hidden values that recor
我们在实际开发工作中离不开数据库,当用到数据库时又不得不提索引,而索引在数据库中是不可或缺的。但索引具体是怎么实现的呢?又是如何起作用的呢?这篇文章主要探讨这些相关问题。1. 什么是索引索引(在 MySQL 中也叫做“键(key)”)是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。要理解 MySQL 中索引是如何工作的,最简单的方法就是去看看一本书的“索引”部分:如果想在一本书中找到
转载
2023-08-26 16:28:22
74阅读
一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的时候,它读到的值又是什么呢?初始化只有两行的表:事务A、B、C的执行流程事务是何时启动的?begin/start transaction并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动。一致性视图是在执行第一个快照读语句时创建的start transaction with co
原创
2022-01-18 11:55:03
223阅读
一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它会被锁住。既然进入等待状态,那么等到这个事务自己获取到行锁要更新数据时,它读到的值又是什么呢?
初始化
事务A、B、C的执行流程
何时启动事务?
begin/start transaction在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动。一致性视图是在执行第一个快照读语句时创建的。
start transactio
转载
2021-06-23 17:18:04
202阅读
MySQL实现联合索引的原理是将多个列的值合并成一个复合索引,以提高查询效率。在MySQL中,可以通过CREATE INDEX语句创建联合索引。下面将从索引的概念、创建、使用以及优化等方面来详细解释MySQL是如何实现联合索引的。
### 索引的概念
索引是一种特殊的数据结构,可以加快数据库表的检索速度。在MySQL中,索引可以单独创建在一个或多个列上,也可以创建在多个列上形成联合索引。联合索引
原创
2024-03-07 04:13:07
73阅读
今天我们来详细了解一下主从同步延迟时读写分离发生写后读不到的问题,依次讲解问题出现的原因,解决策略以及 Sharding-jdbc、MyCat 和 MaxScale 等开源数据库中间件具体的实现方案。 写后读不到问题 MySQL 经典的一主两从三节点架构是大多数创业公司初期使用的主流数据存储方案之一。主节点处理写操作,两个从节点处理读操作,分摊了主库的压力。 但是,有
什么是MVCC?Multi-Version Concurrency Control(MVCC),翻译过来就是多版本并发控制,MVCC是为提高MySQL数据库并发性能的一个重要设计。同一行数据发生读写请求时,会通过锁来保证数据的一致性。MVCC可以在读写冲突时,让其读数据时通过快照读,而不是当前读,快照读不必加锁。在前边文章我们也介绍了MySQL中的锁机制,不熟悉的可以翻阅前边的文章。InnoDB的
MYSQL的隔离性是怎么实现的
在众多数据库管理系统中,MySQL以其高性能和可扩展性受到广泛欢迎。然而,数据库的并发操作问题,尤其是隔离性,常常会影响应用程序的正确性与性能。下面我们将深入了解 MySQL 隔离性的实现。
## 问题背景
在现代业务系统中,多用户并发访问数据库是常态,尤其是电商、银行等对数据一致性和可靠性要求极高的场景。当多个事务同时执行时,数据库需要确保每个事务独立执行,
SQL优化的十大策略:一、尽量全值匹配:当建立了索引列后,在where条件中使用索引的尽量使用二、最佳左前缀法则:如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中的列三、不在索引列上做任何操作:在索引列上做任何操作(计算、函数(自动or手动)类型转换),会导致索引失效而转向全表扫描 (left、right)四、范围条件放最后:中间有范围查询会导致后面的索引列全部失
转载
2023-06-29 16:24:53
108阅读
说白了,索引问题就是一个查找问题。。。1、什么是索引数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。为表设置索引要付出代价的:增加了数据库的存储空间,是在插入
转载
2023-08-12 12:16:48
42阅读
索引的概念索引是帮助高效获取数据的一种数据结构。索引是也可能是一种文件。(对于数据库来说是一种文件,但是索引在其他方面的应用有可能不是文件)索引的引入1.磁盘的一点概念 因为我们操作数据库查询数据,其实也是要到硬盘上读取文件,那么先引入硬盘的几个概念:柱面、磁道、扇区 。 如下图所示,是我们磁盘中的一个磁片的俯视图: 再加一张关于柱面的: 通过观察以上两张图,这里暂时只需要知
转载
2023-08-08 11:19:07
51阅读
## MySQL事务隔离机制的实现
MySQL数据库管理系统支持多种事务隔离级别,这些级别影响并发控制的方式,确保事务的正确性和一致性。事务隔离机制在多线程环境中尤为重要,因为它解决了多个事务并发执行可能引发的各种问题,例如脏读、不可重复读以及幻读。
### 1. 事务隔离级别
MySQL主要提供以下四种隔离级别:
1. **读未提交**(Read Uncommitted):允许一个事务读
原创
2024-10-14 04:18:26
11阅读
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要
转载
2023-08-04 22:36:51
0阅读
使用python制作epub前期工作开始制作第一步、分析网站第二步、抓取数据并清洗获取文章内容第三步、保存到Epub中全部代码 前期工作ebookLib库
关于该库,如果pypi版本太低,需要去gitlab上clone,然后运行python setup.py installzhconv库,主要用来简繁转换一个允许抓取数据的小说网站novel-backup
一点点时间开始制作第一步、分析网站
转载
2023-10-31 22:48:16
104阅读
MySQL快照是指在某个时间点上数据库的一个副本,用于备份和恢复数据。它可以用来创建数据库的备份、数据恢复,以及支持一致性读操作。
要实现MySQL快照,可以使用两种主要方法:物理备份和逻辑备份。
**物理备份:**
物理备份是一种基于二进制文件的备份方法。它直接复制数据库文件,并生成一个完全一致的副本。这个副本可以包含数据文件、日志文件和其他数据库相关的文件。
物理备份的过程如下:
1.
原创
2023-08-13 18:17:23
109阅读