- 博客(9)
- 收藏
- 关注
原创 MYSQL-InnoDB引擎
当业务在进行操作的时候,会先操作缓冲区,如果缓冲区中没有数据的话,会在磁盘中取出加载数据存储在缓冲区,增删改查都会通过缓冲区,并通过一定的频率来刷新到磁盘中达到持久化。
2025-02-25 22:59:20
364
原创 三分钟理解可达性分析算法 - 死亡对象的判断算法
可达性分析算法通过从根对象开始遍历对象图,标记所有可达的对象。未被标记的对象被认为是“不可达”的,即垃圾对象,可以被回收。如果一个对象无法通过任何引用链从根对象访问到,那么它就是不可达的,可以被回收。
2025-02-24 22:21:14
244
原创 Redis的数据结构及其使用场景
String是Redis最基本的数据结构,可以存储任意类型的数据,如文本、数字、二进制数据(如图片、音频、视频)等。:Hash是键值对的集合,适合存储对象。:Sorted Set类似于Set,但每个成员都关联了一个分数(score),根据分数对成员进行排序。:Set是一个无序且元素唯一的集合,支持集合内的增删改查操作,以及多个集合间的交集、并集、差集运算。:List是一个有序的字符串集合,支持从列表两端插入和删除元素,类似于队列或栈。
2025-02-24 21:56:04
298
原创 对于ThreadLocal的理解以及常见问题
是 Java 提供的一个工具类,用于实现线程本地存储。它为每个线程提供了一个独立的变量副本,使得每个线程都可以独立地操作自己的变量,而不会影响其他线程的变量。: 什么是threadlocal?的底层是如何实现的?
2025-02-24 21:54:32
119
原创 MYSQL-锁
看有没有其他兼容的锁,不兼容则等待释放,可以在加行锁时加一个意向锁,这样,每次加表锁时先检查意向锁是否存在,兼容,不用扫描整个表。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减。行级锁,每次操作锁住对应的行数据。select操作是共享锁,此时只有设置共享锁的语句可以兼容,而其他INSERT等操作为排它锁,所有操作都不能执行。
2025-02-24 21:51:31
1438
原创 MYSQL-SQL优化
InnoDB的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则会从行锁升级为表锁。(如果update的内容没有索引,那么会加上表锁,而update一个加了索引的列,会加上行锁)当页中删除的记录达到MERGE_THRESHOLD ( 默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。生序排序,此时用的索引。如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。
2025-02-24 19:25:20
1205
原创 MYSQL-索引
当字段类型为字符串(varchar, text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。相对于Hash索引,B+tree支持范围匹配以及排序操作,而Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,……可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。如果是头部模糊匹配,索引失效(百分号)。
2025-02-24 19:23:37
607
原创 MYSQL-事务
set @@autocommit = 0为手动提交,在最后用"commit"来手动提交事务,想要回滚事务,用 “rollback”(一个数据库下不同表,是可以使用不同的存储引擎的)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了。不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读,:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的,会持久化存到磁盘中。,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的。
2025-02-24 19:22:00
1762
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人