
获得徽章 0
- #每天一个知识点# drop、truncate 和 delete 的区别
DELETE 语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
drop语句将表所占用的空间全释放掉。
在速度上,一般来说,drop> truncate > delete。
如果想删除部分数据用 delete,注意带上 where 子句,回滚段要足够大;
如果想删除表,当然用 drop;如果想保留表而将所有数据删除,如果和事务无关,用 truncate 即可;
如果和事务有关,或者想触发 trigger,还是用 delete;如果是整理表内部的碎片,可以用 truncate 跟上 reuse stroage,再重新导入/插入数据展开评论点赞 - #每天一个知识点# MySQL 的并行策略
按表分发策略:如果两个事务更新不同的表,它们就可以并行。因为数据是存储在表里的,所以按表分发,可以保证两个 worker 不会更新同一行。缺点:如果碰到热点表,比如所有的更新事务都会涉及到某一个表的时候,所有事务都会被分配到同一个 worker 中,就变成单线程复制了。
按行分发策略:如果两个事务没有更新相同的行,它们在备库上可以并行。如果两个事务没有更新相同的行,它们在备库上可以并行执行。显然,这个模式要求 binlog 格式必须是 row。缺点:相比于按表并行分发策略,按行并行策略在决定线程分发的时候,需要消耗更多的计算资源展开评论点赞 - #每天一个知识点# InnoDB 数据页结构
一个数据页大致划分以下七个部分:
File Header:表示页的一些通用信息,占固定的38字节。
page Header:表示数据页专有信息,占固定的56字节。
inimum+Supermum:两个虚拟的伪记录,分别表示页中的最小记录和最大记录,占固定的26字节。
User Records:真正存储我们插入的数据,大小不固定。
Free Space:页中尚未使用的部分,大小不固定。
Page Directory:页中某些记录的相对位置,也就是各个槽对应的记录在页面中的地址偏移量。
File Trailer:用于检验页是否完整,占固定大小 8 字节展开评论点赞 - #每天一个知识点# 主库出问题如何解决?
基于位点的主备切换:存在找同步位点这个问题
MySQL 5.6 版本引入了 GTID,彻底解决了这个困难。那么,GTID 到底是什么意思,又是如何解决找同步位点这个问题呢?
GTID:全局事务 ID,是一个事务在提交的时候生成的,是这个事务的唯一标识;它由两部分组成,格式是:GTID=server_uuid:gno
每个 MySQL 实例都维护了一个 GTID 集合,用来对应“这个实例执行过的所有事务”。
在基于 GTID 的主备关系里,系统认为只要建立主备关系,就必须保证主库发给备库的日志是完整的。因此,如果实例 B 需要的日志已经不存在,A’就拒绝把日志发给 B展开评论点赞