MySQL入门学习
文章平均质量分 77
摩羯座程序员
在IT行业行走的二十年,让我经历了从PC时代到移动互联网,再到如今AI浪潮的技术变迁。我并非追赶每一朵浪花,而是深耕技术本质,构建应对变化的底层能力。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL多版本管理MVCC
读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。max_trx_id:预分配事务ID,当前最大事务ID+1(因为事务的ID是自增的)开启事务后,另外的事务更新、并且提交后,在事务中仍然读取不到另外事务更新的内容。原创 2026-01-24 14:32:36 · 514 阅读 · 0 评论 -
MySQL的逻辑存储结构
Change Buffer:更改缓冲区(针对于非唯一二级索引页),在执行DML语句时,如果这些数据Page没有在Buffer Pool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer中,在未来数据被读取时,再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中。段用来管理多个区(extent)。Log Buffer:日志缓冲区,用来保存要写入到磁盘中的log日志数据(redo log、undo log),默认大小为16MB,日志缓冲区的日志会定期刷新到磁盘中。原创 2026-01-10 15:53:59 · 725 阅读 · 0 评论 -
MySQL的锁(行锁)
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。InnoDB的行锁是针对于索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时就会升级为表锁。行级锁是操作锁住对应的行数据,锁定粒度最小,发生锁冲突的概率最低,分为行锁、间隙锁、临键锁。表级锁是操作锁住整张表,锁定粒度大,发生锁冲突的概率高,分为表锁、元数据锁,意向锁。行级锁,每次操作锁住对应的行数据。(1)索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁。原创 2026-01-07 22:31:53 · 455 阅读 · 0 评论 -
MySQL的锁-全局锁及表锁
当对表进行select, insert, update, delete, select ... for update时, MDL加的是shared_read, shared_write锁;MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上. MDL锁主要作用是维护表元数据的数据一致性, 在表上有活动事务的时候,不可以对元数据进行写入操作.为了避免DML在执行时, 加的行锁与表锁的冲突, 在InnoDB中引入了意向锁, 使得表锁不用检查每行数据是否加锁, 使用意向锁来减少表锁的检查.原创 2026-01-03 11:46:30 · 619 阅读 · 0 评论 -
SQL性能优化-2
没有not null约束:InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为null,计数累加。count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL, 累计值就加1,否则不加,最后返回累计值。当分页很大时,查询数据变慢。InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。用法:count(*)、count(主键)、count(字段)、count(1);原创 2025-12-29 21:58:02 · 541 阅读 · 1 评论 -
SQL-性能优化
当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。Using filesort: 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫filesort排序。使用了临时表,性能很低。using index: 通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高。原创 2025-12-28 09:43:11 · 649 阅读 · 0 评论 -
索引的使用及设计规则
当字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。// mysql数据库使用的是联合索引。尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。原创 2025-12-24 23:02:35 · 440 阅读 · 0 评论 -
MySQL索引使用--最左前缀法则
explain select * from tb_user where profession = '软件工程' and age >= 30 and status = '0';可能使用的索引是idx_pro_age_sta, 实际使用的索引是idx_pro_age_sta;可能使用的索引是idx_pro_age_sta, 实际使用的索引是idx_pro_age_staidx_pro_age_sta。可能使用的索引是 idx_pro_age_sta;实际使用的索引是 idx_pro_age_sta;原创 2025-12-14 21:42:39 · 283 阅读 · 0 评论 -
MySQL索引性能分析
sql的执行计划:explain select s., c. from student s, course c , student_course sc where s.id = sc.studentid and sc.courseid= c.id。表示select的类型,常见的取值有SIMPLE(简单表,即不使用表连接或子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等。原创 2025-12-13 15:05:41 · 967 阅读 · 0 评论 -
MySQL的索引
在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。索引列也是要占用空间的,索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率也降低。假设:一行数据大小为1k,一页中可以存储16行这样的数据,InnoDB的指针占用6个字节的空间,主键即使为bigint,占用字节数为8。提高数据检索的效率,降低数据库的IO成本,通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。原创 2025-12-07 09:10:06 · 787 阅读 · 0 评论 -
MySQL数据库主从复制
其中主从复制时一种关键的高可用和数据冗余技术,通过将主服务器上的所有更改的数据实时或者近乎实时地复制到从服务器上,确保了数据的安全备份。从服务器接收到主服务器的binlog内容后,会将其存储在本地的relay log中,从服务器上的SQL线程负责读取relay log中的事件,并在本地按照相同的顺序执行这些事件,从而实现与主服务器的数据同步。主从复制的核心是“主库写入,从库读取”,主库负责处理所有的写操作,并生成binlog日志,从库接收并执行这些binlog中的变更操作,从而达到与主库的数据同步。原创 2024-02-03 20:12:10 · 738 阅读 · 1 评论 -
MySQL数据库的锁机制
MySQL数据库的锁是控制并发访问和事务处理中数据一致性的一种机制。在多用户环境或并发事务环境下,不同的事务同时尝试对相同的数据进行读取或修改操作,为了防止多个事务间相互干扰导致数据不一致问题,数据库系统使用锁来确保同一时刻只有一个事务能够对特定资源进行写入操作。原创 2024-01-24 23:00:00 · 1498 阅读 · 1 评论 -
MySQL数据库索引优化实战
在数据库的应用中,性能优化是一个持续不断的过程。其中索引优化是提高查询速度的最有效的方法,本文将通过案例,深入探讨MySQL索引优化,帮助读者理解索引优化、在实际的应用中提升性能。原创 2024-01-04 22:54:06 · 1183 阅读 · 1 评论 -
MySQL数据库索引优化
MySQL数据库索引优化,介绍了索引的重要性、什么是索引、如何使用索引、索引的优化以及示例分析原创 2024-01-01 22:50:44 · 2135 阅读 · 0 评论 -
MySQL数据库导入100万数据不同方式的性能差异
mysql单笔insert、批量insert已经import的性能比较原创 2023-12-30 20:57:56 · 1559 阅读 · 1 评论 -
MySQL数据库多版本并发控制(MVCC)
mysql数据库多版本控制MVCC原创 2023-12-28 22:09:03 · 839 阅读 · 1 评论 -
MySQL的事务-可重复读
MySQL数据库的可重复读隔离级别原创 2023-12-26 23:25:22 · 855 阅读 · 2 评论 -
MySQL的事务-隔离级别
MySQL数据库的隔离级别介绍原创 2023-12-25 23:00:33 · 591 阅读 · 0 评论 -
MySQL的事务-原子性
mysql数据库事务原子性的理解原创 2023-12-24 22:25:53 · 1657 阅读 · 0 评论 -
Linux环境下MySQL安装
linux环境下如何安装mysql数据库原创 2023-12-24 17:16:18 · 500 阅读 · 0 评论
分享