![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
保护小cc
这个作者很懒,什么都没留下…
展开
-
DAY08- count(*)
count(*) 实现方式MyISAM 引擎把一个表的行数存在了磁盘上,所以执行 count(*)直接返回,效率很高InnoDB,需要一行一行地从引擎里面读出来,然后累计计数。count(*) 没加where条件,不然MyISAM也不能返回这么快为什么InnoDB不存起来??因为 MVCC的缘故,同一时刻不同用户查到的值也可能不同。如何计数本质:需要自己找一个地方,记录起来redis 缓存,优点:速度很快。缺点:丢失数据,在mysql更新的时候,就会有问题 。而且redis崩溃的原创 2022-03-02 10:15:21 · 241 阅读 · 0 评论 -
DAY07
删除表,文件大小不变删除流程删除某条记录,InnoDB会把这行记录标记为删除,如果之后再插入一条数据的话,可能会复用这个位置。所以,磁盘的大小并不会变。所以通过delete删除的时候,就是把所有的数据页标记为可复用,但是磁盘上,文件不会变小。也就是说,通过 delete 命令是不能回收表空间的。这些可以复用,而没有被使用的空间,看起来就像是“空洞”插入数据也会造成空洞,会产生页分裂。更新所索引就是删除一个旧的值,插入新的值。也有空洞。结论: 大量的增删改,都可能造成空洞。去掉空洞,就达到原创 2022-03-01 23:42:42 · 106 阅读 · 0 评论 -
DAY06-普通索引和唯一索引
查询效率select * from T where id=1普通索引查询过程:先查找id=1的数据,然后向右查找,直到找到第一个id != 1的数据,然后返回。唯一索引查询过程: 查找id=1的数据,找到立刻返回(因为是唯一索引,不存在重复)极端情况:数据是按页保存的,当使用普通索引,恰巧id=1的数据是当前页的最后一个,需要将下一个数据页读入内存进行判断,但是一页大概是16K,可以存储上千个key,可以忽略不计。更新效率change buffer过程:更新的数据如果在内存中,就直接更新。原创 2022-02-17 20:40:05 · 155 阅读 · 0 评论 -
DAY05-锁
锁的初衷是处理并发问题。根据加锁的范围,大致分为三级:全局锁、表级锁、行锁读锁 是共享锁,加上之后其他锁只能读不可写,本线程也不能写。写锁 是排它锁,写锁意味着其他线程不能读也不能写。全局锁加全局读锁Flush tables with read lock (FTWRL)set global readonly=true遇到异常后,系统会自动释放FTWRL,整个库回到正常的状态。如果设置了global,则不会更改。风险较高使用场景:做全库逻辑备份表级锁表锁一般都是数据库.原创 2022-02-16 14:54:24 · 222 阅读 · 0 评论 -
DAY04-索引篇
索引就是一种数据结构常见的索引结构:哈希表、有序数据、搜索树哈希表结构:一种键值对存储的数据结构实现方式:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在相应的位置里。会出现多个key经过hash计算后,出现重复的情况,处理这种情况的办法就是 拉出一个链表。优点:等值查询速度非常快缺点:范围查询要进行全表扫描适用范围: 适用于等值查询的情况,比如 Memcached及其他一些NoSQL引擎有序数据结构: 数组优点: 等值查询和范围查询..原创 2022-02-16 11:22:18 · 369 阅读 · 0 评论 -
DAY03
事务事务 保证 一组操作全部成功,或者失败。事务是引擎层实现的,MYISAM不支持事务,InnoDB支持事务事务的4个特性,ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)当数据库上有多个事务同时执行时候,就会出现脏读、不可重复读、幻读的问题。所以有个隔离级别的概念`事务的隔离级别:读未提交(read uncommitted):一个事务未提交,他的更变就可以被其他事务看到读提交(read committed)原创 2022-02-16 10:27:34 · 203 阅读 · 0 评论 -
DAY02
DML语句。insert、update、delete、create等数据库操作语句WAL技术:Write-Ahead Logging,先写redo log日志,再写磁盘。‘先写日志’ 也是先写磁盘,只不过日志是顺序写盘,速度很快redo log 是 InnoDB引擎特有的日志当要更新数据时,先写redo log,等数据库空闲的时候在更新数据。但是redo log 有大小限制,达到限制之后,要强制刷日志。有了redo log ,即使数据库异常了,也可以根据redo log来恢..原创 2022-02-11 16:05:11 · 618 阅读 · 0 评论 -
MySQL感悟DAY01
零散记录:DAY011、MySQL 分为 客户端和服务端。2、服务端分为两部分:server层存储引擎层3、8.0版本取消了缓存模块4、缓存是以key:value的形式存在 key是sql语句,value是结果5、表的更新会导致缓存全部失效4、长链接会导致内存持续增长,不会释放,时间长了会发生OOM,怎么解决?定期断开长链接版本>=5.7,每次执行大操作后, 通过执行 mysql_reset_connection 来重新初始化链接资源,使恢复到刚刚创建完的状态。5、分析原创 2022-02-10 20:37:19 · 514 阅读 · 0 评论