Mysql底层剖析
文章平均质量分 78
Durian_piza
这个作者很懒,什么都没留下…
展开
-
Mysql底层剖析——Mysql性能优化篇
1、变小的通常更好 尽量使用正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更少2、简单就好 比如使用整型而不是varchar类型存储IP地址3、尽量避免使用Null 因为查询中包含NULL的列,通常来说更难优化,可为Null的列会使用更多的存储空间,在MySQL里也需要特殊处理。4、选择合适的表示列5、整数通常是标识列最好的选择6、避免使用ENUM和SET作为标识列7、避免使用字符串类原创 2022-07-14 11:46:36 · 534 阅读 · 0 评论 -
Mysql底层剖析——各存储引擎的区别
1、是MySQL的默认事务性引擎,拥有自动崩溃恢复特性。2、将每个表的数据和索引都放在一起放在.ibd文件中。3、InnoDB有两个表,一个是.ibd文件,一个是.frm(存储数据结构通用)4、采用MVCC支持高并发,实现了四个标准的隔离级别,在REPEATED READ中通过实现间隙锁来防止幻读的出现。间隙锁使的InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻影行的插入。5、磁盘读取数据时采用可预测性预读,能够自动在内存中创建hash索引加速读操作的自适应哈希索引等。1、MyISAM原创 2022-07-14 11:46:06 · 3180 阅读 · 0 评论 -
Mysql底层剖析——多版本并发控制(MVCC)
减少锁的开销类似于乐观锁,通过保存数据在某个时间点的快照来实现的,快照指的是事务中的ReadView。通过undo log版本和ReadView机制实现的(MVCC)。可重复读的ReadView和读已提交的ReadView的区别? 可重复读和读已提交的ReadView时机不同,可重复读只会用第一次生成的ReadView。读已提交每次都会生成ReadView,所以会看其他人更改的记录,造成不可重复度。 在数据库中每行数据都有两个隐藏字段,一个是trx_id,一个是roll_poi转载 2022-07-14 11:45:29 · 105 阅读 · 0 评论 -
Mysql底层剖析——事务特性与隔离级别
四大特性都是为了保证一致性原子性:要么全部完成,要么全部回滚,不能只执行一部分。一致性:数据库事务总是从一个一致性的状态转换到另一个一致性的状态。隔离性:一个事务所做的修改在commit之前,对其他的事务是不可见得。持久性:事务被提交后就一直就会被永久的保留在数据库中。未提交读事务中的修改,即使没有提交对其他事务也都是可见的。可以读取未提交的数据也就是脏读提交读(不可重复度)一个事务开始到提交之前,所做的任何修改其他事务都是不可见的。可重复读解决了脏读的问题可串行化通过强制事务串行执行,避免原创 2022-07-14 11:44:48 · 114 阅读 · 0 评论 -
Mysql底层剖析——表锁、行锁、共享锁
默认对update,delete,insert加排他锁,select默认不加锁在手动加共享锁的方式是 select…lock in share mode.手动加排它锁的方式是 select…for update 就是读锁,当前事务加了共享锁以后,其他事务也可以给这条数据加共享锁,但是不能加排它锁,同一个事务的读写是不会互斥的,不同事务的读锁和写锁才会排斥。 就是写锁,update,delete,insert默认都是加写锁,想要申请到写锁,要确保数据没有其他事务的共享锁和排它锁,而原创 2022-07-14 11:52:16 · 623 阅读 · 0 评论 -
Mysql底层剖析——Mysql逻辑架构与执行流程
主要负责连接处理、授权认证、安全 负责查询、解析、优化、缓存以及所有内置函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。 包含存储引擎,存储引擎负责MySQL中数据的存储和提取,服务器通过API与存储引擎进行通信,这些接口屏蔽了不同引擎的差异。存储引擎API包含几十个一层函数,例如开启事务函数等。不同存储引擎相互隔离,不会通信,主要的作用是响应上层服务器的请求。 在解析一个查询语句之前,如果查询缓存是打开的,那么MySQL会优先检查这个查询是否命原创 2022-07-13 18:02:37 · 803 阅读 · 0 评论