青云博客 记录、分享

高并发场景下,如何安全修改同一行数据

在高并发情况下,多事务安全修改同一行数据可以采用以下方法: 乐观锁:在数据表中添加一个版本号(或者时间戳)字段,每次更新数据时都会检查该字段的值。当多个并发的请求同时修改同一行数据时,只有一个请求能够成功执行更新操作,其他请求需要重新检查数据是否被修改过。如果数据没有被修改,那么它们可以重新尝试更新

詹学伟 Published on 2024-04-22

一条SQL的执行过程是怎样的

一条 SQL 的执行过程可以大致分为以下几个步骤: 连接器: 客户端与数据库建立连接,并发送 SQL 语句给数据库服务。 连接器验证客户端的身份和权限,确保用户有足够的权限执行该 SQL 语句。 查询缓存:

詹学伟 Published on 2024-04-22

Binlog有几种录入格式与区别

MySQL的Binlog有三种录入格式,分别是Statement格式、Row格式和Mixed格式。它们的主要区别如下: Statement格式:

詹学伟 Published on 2024-04-22

说下你对分库分表的理解

MySQL的分库分表拆分策略通常包括垂直拆分和水平拆分两种方式。下面我将介绍这两种策略以及分库分表面临的问题和解决方案。 水平切分:水平切分又称为 Sharding,它是将同一个表中的记录拆分到多个结构相同的表中。当一个表的数据不断增多时,Sharding 是必然的选择,它可以将数据分布到集群的不同

詹学伟 Published on 2024-04-22

如何解决MySQL死锁问题

MySQL在并发环境下可能会出现死锁问题。死锁是指两个或多个事务互相等待对方释放资源,导致无法继续执行的情况。 解决死锁问题的方法通常有以下几种: 调整事务隔离级别:通过将事务隔离级别降低为读未提交(或读已提交,可以减少死锁的发生概率。但是要注意隔离级别的降低可能引发脏读、不可重复读等数据一致性问题

詹学伟 Published on 2024-04-22

MySQL 有哪些高可用方案

MySQL的高可用方案主要有以下几种: 主从复制:这是最常见的高可用方案。主库负责处理写操作,并将数据变更记录到binlog日志。从库将主库的binlog复制到自己的中继日志,然后执行中继日志中的事件,以达到与主库数据一致的目的。当主库出现故障时,可以将从库提升为新的主库,实现服务的高可用。 集群:

詹学伟 Published on 2024-04-22

MySQL索引底层结构为什么使用 B+树

MySQL使用B+树作为索引的底层结构有以下几个主要原因: 良好的平衡性:B+树是一种自平衡的树结构,不论是在插入、删除还是查询操作中,它都能保持相对较好的平衡状态。这使得B+树能够快速定位到目标数据,提高查询效率。 顺序访问性:B+树的所有叶子节点是按照索引键的顺序排序的。这使得范围查询和顺序访问

詹学伟 Published on 2024-04-22

如何优化深分页limit 1000000?(深入)

1.数据准备 -- 1.创建表: drop table user_login_log; CREATE TABLE user_login_log ( id INT PRIMARY KEY AUTO_INCREMENT, user_id VARCHAR(64) NOT NULL, ip V

詹学伟 Published on 2024-04-22

如何优化深分页limit 1000000

深分页问题是 MySQL 中常见的性能问题,当你尝试获取大量数据的后续页面时,性能会显著下降。这是因为 MySQL 需要先扫描到指定的偏移量,然后再返回数据。 例如,以下查询可能会非常慢: SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 这是因为

詹学伟 Published on 2024-04-22

了解MySQL锁升级吗

MySQL锁升级是指在并发事务执行过程中,当某个事务无法满足当前所需的锁级别时,系统会自动将该事务的锁级别升级为更高级别的锁。 通常情况下,MySQL 会根据事务的需求和操作的对象自动选择合适的锁级别。然而,在某些情况下,事务无法获取到所需的锁级别,就会触发锁升级。 例如以下两种常见的锁升级场景:

詹学伟 Published on 2024-04-22
Previous Next