
MySQL
文章平均质量分 60
岁月丶漫长
这个作者很懒,什么都没留下…
展开
-
为啥删除了表的一半数据,表文文件大小没变化?
1:因为delete 命令其实只是把记录的位置,或者数据页标记为了“可复用”,但磁盘文件的大小是不会变的。也可以认为是一种逻辑删除,所以物理空间没有实际释放,只是标记为可复用,表文件的大小当然是不变的啦!2:表的数据信息存在哪里?表数据信息可能较小也可能巨大无比,她可以存储在共享表空间里,也可以单独存储在一个以.ibd为后缀的文件里,由参数innodb_file_per_table来控制,建议总是作为一个单独的文件来存储,这样非常容易管理,并且在不需要的时候,使用drop table命令也能直接把对应的原创 2021-11-18 11:11:04 · 1236 阅读 · 0 评论 -
数据库SQL语句执行突然变得慢是什么原因?
1,redo log(重做日志满了),要flush脏页,Innob要将redo log的一部分日志和对应内存中的脏页刷回磁盘,这种时候,数据库的更新操作就会堵塞。2,内存不够了,需要先将脏页写到磁盘,这种情况其实是常态。InnoDB用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态第一种是,还没有使用的内存第二种是,使用了,并且是干净页(内存数据和磁盘数据一致)第三种是,使用了并且是脏页(内存数据更新之后,还未写到磁盘中)InnoDB的策略是尽量使用内存,因此对于一个长时间原创 2021-11-18 10:32:42 · 2263 阅读 · 0 评论 -
怎么给字符串字段添加索引?
这里我拿邮箱举例查询邮箱sqlmysql> select f1, f2 from SUser where email='xxx';如果这个邮箱字段没有索引,那么这个语句只能做全表扫描,所以我们需要给这个语句创建索引,给这个字符串类型创建索引的方式有俩个,一个是直接创建普通索引,一个是前缀索引。前缀索引:可以定义字符串的一部分作为索引,占用空间会变小,但是可能会增加额外的扫描次数。普通索引:mysql> alter table SUser add index index1(email原创 2021-11-17 11:40:13 · 2154 阅读 · 0 评论 -
MySQL的行锁,死锁
简介MySQL的行锁是在引擎层由各个引擎自己实现的,并不是所有引擎都支持行锁,比如MylSAM就不支持行锁,不支持行锁意味着他的并发控制只能使用表锁,这样就会很影响业务的并发度,因为它锁的范围更大,InnoDB支持行锁的,这也是MyISAM被InnoDB替代的原因之一。行锁行锁是指针对数据库中表中每行数据的锁,当一个事务A对这行数据进行更新时,另一个事务B也要对这行数据更新,那么必须要等事务A的操作完成过后才可以更新。俩阶段锁协议如图所示:事务B的update语句会被堵塞,直到事务A执行comm原创 2021-11-15 11:42:42 · 2642 阅读 · 0 评论 -
数据库事务(详细)
事务的概念简单来说,事务就是保证一组数据库操作,要么全部成功,要么全部失败。在MySql是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySql原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。事务的特性事务的特性分为ACID(Atomicity.Consistency、lsolation、Durability )即原子性,一致性,隔离性,持久性原子性:是指事物的原子性,对数据库数据的一系列操作要么全部成功,要么全部失败。基于Redo/Undo机制原创 2021-11-05 11:08:57 · 612 阅读 · 0 评论