MySQL
文章平均质量分 76
熊掌&鱼
持续更新
展开
-
MySQL InnoDB MVCC
不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。ReadView(读视图)是快照读SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除。原创 2024-03-14 15:34:51 · 347 阅读 · 0 评论 -
MySQL索引使用原则
尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少select *,select * 极易出现回表查询,扫描两次索引,从二级索引中查一次,从聚集索引中查一次;如果索引多列(联合索引),要遵循最左前缀法则,最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳过某一列,索引将部分失效(后面的字段索引失效)。如果仅仅是尾部模糊匹配,索引不会失效(like 'xxx%'),如果是头部模糊匹配,索引将失效(like '%xxx')。三个点:什么表需要建索引;原创 2024-03-14 15:27:56 · 436 阅读 · 0 评论 -
MySQL SQL性能分析
(七根下划线)2、#开启MySQL慢查询日志开关#设置慢查询的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志。原创 2024-03-14 15:26:12 · 637 阅读 · 2 评论 -
MySQL索引分类
在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种: CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_col_name,...);原创 2024-03-14 15:21:53 · 217 阅读 · 0 评论 -
MySQL InnoDB事务原理
可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。undo log销毁:undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。原创 2024-03-14 15:45:06 · 434 阅读 · 0 评论 -
MySQL SQL优化
当页中删除的记录达到MERGE_THRESHOLD(合并页的阈值,默认为页的50%,可以自己设置,在创建表或者创建索引时指定),innoDB会开始寻找最靠近的页(前或后)看看是否将两个页合并以优化空间使用。Count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数 不是NULL,累积值就加1,否则不加,最后返回累计值。innoDB的行锁是针对索引加的锁,不是针对记录加的锁,更新条件要走索引,并且该索引不能失效,否则会从行锁升级为表锁。InnoDB引擎遍历整张表,但不取值。原创 2024-03-15 18:40:16 · 734 阅读 · 1 评论 -
MySQL 视图
当使用WITH CHECK OPTION子句创建视图时,Mysql会通过视图检查正在更改的每个行,例如插入、更新、删除,以使其符合视图的定义。视图(View)是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。不加WITH CASCADED CHECK OPTION:mysql不会检查插入视图的数据是否满足视图的查询范围,不满足也能插入成功。要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。原创 2024-03-15 18:42:03 · 407 阅读 · 1 评论 -
MySQL InnoDB引擎架构
更改缓冲区(针对于非唯一二级索引页),在执行DML语句时,如果这些数据Page没有在Buffer Pool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer中,在未来数据被读取时,再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中。缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘I0,加快处理速度。原创 2024-03-15 18:44:15 · 1913 阅读 · 1 评论 -
MySQL 常用工具
错误日志是MySQL中最重要的日志之一,它记录了当mysql的启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。默认情况下,查询日志是未开启的。由于服务器生成的二进制日志文件以二进制格式保存,所以如果想要检查这些文本的文本格式,就会使用到mysqlbinlog日志管理工具。②.MySQL的主从复制。该日志是默认开启的,默认存放目录/var/log/,默认的日志文件名为mysqld.log。也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。原创 2024-03-15 18:49:05 · 1775 阅读 · 1 评论