mysql怎么查原理 mysql怎么查询( 二 )


MySQL binlog 原理MySQL的二进制日志可以说是MySQL最重要的日志mysql怎么查原理了mysql怎么查原理,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的 。
binlog是Mysql sever层维护的一种二进制日志 , 与innodb引擎中的redo/undo log是完全不同的日志mysql怎么查原理;其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以"事务"的形式保存在磁盘中;
Mysql binlog日志有ROW,Statement,MiXED三种格式mysql怎么查原理:
有 statement,row, mixed3种,其中mixed是指前2种的混合.
以insert into xxtable values (x,y,z)为例,
影响: 1行,且为新增1行, 对于其mysql怎么查原理他行没有影响.
这个情况,用row格式,直接复制磁盘上1行的新增变化.
这个情况,一般也只是影响1行. 用row也比较合适.
以过年发红包,全公司的人,都涨薪100元.
这个语句带来的影响,是针对每一行的, 因此磁盘上很多row都发生了变化.
此处,适合就statment格式的日志.
2种日志,各有各的高效的地方,mysql提供了mixed类型.
可以根据语句的不同,而自动选择适合的日志格式.
Mysql InnoDB索引原理 理解Mysql索引的原理和数据结构有助于我们更好的使用索引以及进行SQL优化,索引是在存储引擎层面实现的,所以不同的引擎实现的索引也有一定的区别 , 但是在生产环境中 , 我们最常用的就是InnoDB引擎和B树索引,OK,那本文要讨论的重点也同样是InnoDB引擎下的B树索引。
我们建立一个表来进行测试 , 表的DDL如下所示 , 我们要关注的是表t_book上的主键索引id和name author publish_date三列组成的索引test_index 。
Mysql中的B树索引是使用B+树实现的,关于B+树的数据结构个人认为美团点评技术博客中Mysql索引原理及慢查询优化一文中介绍的非常详实,B+树的数据结构如下图所示 。
图中浅蓝色块即磁盘块,根节点磁盘块中存储17和35两个数据 , 其中指针P1指向小于17的数据,指针P2指向大于17小于35的数据,指针P3指向大于35的数据 。显然通过B+树索引查询数据与B+树的高度有关 , 如上图的B+树索引查找一个叶子节点的数据只需要三次磁盘IO,对于Mysql来说三层的B+树可以索引上百万的数据,这对于查询效率的提升是巨大的 。
总结起来Mysql中B树索引有以下关键特点:
Mysql中的B树索引有两种数据存储形式,一种为聚簇索引,一种为二级索引 。
InnoDB一般会使用表的主键来作为聚簇索引,如果一个表没有主键(不建议这么玩)InnoDB会选用一个唯一非空索引来代替 , 如果没有这样的索引 , InnoDB会隐式建立一个聚簇索引 。聚簇的含义即是数据行和相邻的键值紧凑的存储在一起 , 占据一块连续的磁盘空间 , 因此通过聚簇索引访问数据可以有效减少随机IO,通常使用聚簇索引查找比非聚簇索引查找速度更快 。以我们建立的表t_book为例,聚簇索引即为自增主键id , 其B树索引数据结构可以用下图来表示 。
聚簇索引有以下关键特点:
InnoDB的B树索引中除了聚簇索引 , 就都是二级索引了,二级索引的含义是索引的叶子节点除了存储了索引值,还存储了主键id , 在使用二级索引进行查询时 , 查找到二级索引B树上的叶子节点后还需要去聚簇索引上去查询真实数据,但是这里有一种特殊情况,即查询所需的所有字段在二级索引中都可以获取,此时就不需要再去回表查数据了,这种情况就是索引覆盖(EXPLAIN中EXTRA列中会出现USING INDEX,本文只关注索引结构,不详细讨论索引覆盖等技术的使用,如果深入理解索引的数据结构,索引覆盖等技术也没有那么神秘) 。

推荐阅读