MySQL执行流程与架构设计max_connections默认是151,最大是10万; mysql参数有2个级别:
预读取: 局部性原理,当访问磁盘上的一块数据的时候,附近的其他数据也可能将要访问 InnoDB的page默认是16KB;如果一个page存不下数据,会存入行溢出; Buffer Pool:存储page的内存区域,提升读写效率;默认是128MB,是Innodb数据库的关键指标,可以占到物理内存的80%; 脏页:page中的数据与DB file中的数据不一致的时候,后台有很多线程在进行刷脏; 双写缓冲:page页的备份;
sql执行流程
一个更新语句的执行流程
redo log分为两阶段提交:prepare和commit,保证bin log(事务)数据的一致性; 索引原理什么是索引数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询,更新数据库表中数据。 主键索引:不允许存在空值; 唯一索引:允许出现一个空值; 索引的数据结构B+Tree特性:
红黑树的特性:最长路径不超过最短路径的2倍; InnoDB索引索引即数据,数据即索引,数据放在了主键索引的叶子节点; 聚集索引:索引的键值的逻辑顺序,跟数据行的物理存储顺序一致;主键索引是聚集索引; 二级索引:叶子节点存储的是主键索引的值和该列的索引;会回表去主键索引中查询数据; 如果没有主键索引,会使用唯一索引;如果不存在任何索引,会存在一个隐藏的字段row id创建聚集索引; 创建索引的原则
在什么字段上创建索引?
什么时候索引会失效?
MySQL事务与锁机制数据库事务的定义事务时数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成; 数据库事务的4大特性
幻读事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读; 只有插入产生的读不一致性才成为幻读; 脏读所谓的脏读,其实就是读到了别的事务回滚前的脏数据 不可重复读事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了 SQL92标准Read Uncommitted(未提交读)--未解决任何并发问题事务未提交的数据对其他事务也是可见的,会出现脏读 Read Committed(已提交读)--解决脏读问题一个事务开始之后,只能看到已提交的事务所做的修改,会出现不可重复读 Repeatable Read(可重复读)--解决不可重复读问题在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未解决幻读的问题 Serializable(串行化)最高的隔离级别,通过强制事务的串行执行 InnoDB对事务隔离级别的支持程度MVCCInnoDB为每行记录都实现了三个隐藏字段:
MySQL锁的基本类型行锁与表锁的区别
行锁:共享锁(Shared Locks)共享锁,又称为读锁,简称S锁 共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改; 行锁:排他锁(Exclusive Locks)排他锁又称为写锁,简称X锁 排他锁不能与其他锁并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的锁(共享锁,排他锁),只有该获取了排他锁的事务是可以对数据进行读取和修改; InnoDB的行锁是通过锁住索引来实现的; MySQL优化
|
点击查看更多