
MYSQL
灵山一笑
这个作者很懒,什么都没留下…
展开
-
【MySQL学习笔记】普通索引和唯一索引
普通索引和唯一索引查询过程比较 从B+树的树根开始,按层搜索到叶子节点。 对于普通索引,查到满足条件的第一个记录后,继续查找下一个记录,找到碰到第一个不满足条件的记录为止。 对于唯一索引,由于索引定义了唯一性,查找到第一个记录,就会停止搜索。这二者的性能差距有多大? Innodb的数据是按数据页为单位来读取的,大小默认为16KB。 由于引擎是按页...原创 2019-10-19 13:47:28 · 242 阅读 · 0 评论 -
【MySQL学习笔记】事务隔离与锁
可重复读级别下,在事务执行期间,即使其他事务修改了数据,该事务看到的仍然跟启动是看到的一样。 但是,如果一个事务要更新一行数据,这时刚好有另一个事务拥有这一行的行锁,那本事务就会进入锁等待状态。问题:该事务获取到行锁,要更新数据时,这时候,它读的数据值是什么呢?答:更新数据的时候,都是先读后写,这个读,只能读当前值,成为“当前读”。 另一种情况:事务中,查询语句如...原创 2019-10-15 20:07:32 · 215 阅读 · 0 评论 -
【MySQL学习笔记】并发事务的查询问题
以座位预定业务为背景:用户A查询座位S是否空闲,结果是空闲;用户B查询座位S是否空闲,结果是空闲;用户A预定座位S,将座位S状态设置为占用;用户B预定座位S,将座位S状态设置为占用;上述流程导致座位S被重复预定。解决方案:在业务层,使用队列或者分布式锁,来保证数据库层的并发安全,这种方式在业务量小时,有点大材小用; 使用悲观锁,第一个用户查询时,会触发锁行,或者...原创 2019-07-03 20:22:13 · 500 阅读 · 0 评论 -
【MySQL学习笔记】MySQL架构概览
优化器:决定如何选择索引,表关联时,决定表的关联顺序,执行方案确定后,开始进入执行器;执行器:执行语句;调用引擎的接口进行数据读写。...原创 2019-07-04 20:39:49 · 233 阅读 · 0 评论 -
【MySQL学习笔记】redo log与binlog
redo log , binlog如果每次更新操作都写磁盘,而磁盘也要找到对应的记录,然后再更新,整过过程的IO成本,查找成本很高。为解决这个问题,mysql的引擎innodb使用WAL技术,write-ahead logging,即先写日志,空闲时再写磁盘:当有一条记录需要更新时,Innodb引擎会先把记录写到redo log里,并更新内存,更新就算完成,同时,innodb会在适当的时候...原创 2019-07-22 23:11:45 · 227 阅读 · 0 评论 -
【MySQL学习笔记】事务
事务是用来保证一组数据库的操作,要么全部成功,要么全部失败;应用场景较多:如银行转账,订票等。Mysql的事务是在引擎层支持的,原生的MyISAM不支持,因此主流使用InnoDB引擎。本文概要介绍事务的四个特性,之后,详细描述隔离性的相关内容。事务的ACID特性原子性顾名思义,不可分割,要么所有指令都成功,要么所有指令都失败;一致性事务开始前和事务结束后,数据库的状态都是正...原创 2019-09-19 20:48:08 · 203 阅读 · 0 评论 -
【MySQL学习笔记】索引
索引的作用和重要性索引和书的目录类似,没有目录,找书里的特定内容,需要从头到尾一页页查找,没有索引,查找表中的某条信息,需要从头到尾一条条遍历查询。索引的设计方式三种主要的数据模型:哈希表,有序数组,搜索树。哈希表原理:key-value的形式存储数据,取数据时,根据key即能得到对应的值。实现方式简单的描述即使用特定的哈希函数,将key映射为大于0的整数m,将ke...原创 2019-09-25 13:38:43 · 193 阅读 · 0 评论 -
【MySQL学习笔记】锁
全局锁 主要用在逻辑备份中,db引擎不支持事务的场景下。对于Innodb引擎,建议用single-transaction,视图形式备份,不影响业务;表锁一般在数据库引擎不支持行锁的时候,才会用到。在mysql中,引入了MDL(metadata lock),对一个表做增删改查时,加MDL读锁;对表结构做变更时,加MDL写锁。MDL 读锁之间不互斥,读锁与写锁互斥,写锁...原创 2019-10-11 19:43:05 · 201 阅读 · 0 评论