![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
文章平均质量分 90
一只牛_007
这个作者很懒,什么都没留下…
展开
-
Mysql 优化的一些要点
本文是学习《高性能 Mysql》中关于 Mysql 中查询优化需要注意的一些要点的总结:Schema 和数据类型优化尽量避免使用 NULL 值,尤其存在索引时,因为如果 NULL 列是索引,索引统计以及值的比较更加复杂 尽量选择小的简单的数据类型,因为它们占用更少的磁盘,内存和 CPU 缓存 尽量使用 TIMESTAMP 代替 DATETIME,因为 TIMESTAMP 只是 DATETIME 一半大小存储空间,还会跟时区变化,但是 TIMESTAMP 允许的时间范围比较小(1970年~2038原创 2021-04-05 16:32:24 · 90 阅读 · 0 评论 -
原创 MySQL探秘(八):基于Redo Log和Undo Log的MySQL崩溃恢复流程(一致性)
黑盒下的更新数据流程当我们查询数据的时候,会先去Buffer Pool中查询。如果Buffer Pool中不存在,存储引擎会先将数据从磁盘加载到Buffer Pool中,然后将数据返回给客户端;同理,当我们更新某个数据的时候,如果这个数据不存在于Buffer Pool,同样会先数据加载进来,然后修改修改内存的数据。被修改过的数据会在之后统一刷入磁盘。这个过程看似没啥问题,实则不讲武德。假设我们修改Buffer Pool中的数据成功,但是还没来得及将数据刷入磁盘MySQL就挂了怎么办?按照上图的逻原创 2021-04-05 16:29:34 · 172 阅读 · 0 评论 -
MySQL探秘(七):InnoDB行锁算法
在上一篇中,我们了解到InnoDB使用一致性非锁定读来避免在一般的查询操作(SELECT FOR UPDATE等除外)时使用锁。然而锁这个事情是无法避免的,数据的写入,修改和删除都需要加锁。今天我们就继续学习InnoDB锁相关的知识。由于文章涉及的概念比较多,害怕大家看完后会骂人,有一种字我都认识,就不太懂的感觉,文章会给出一些实例和试验,依据具体案例来讲解这些概念。毕竟,实践才能出真知。InnoDB存储引擎支持表锁和行锁。顾名思义,表锁是锁住整张表,行锁只是锁住某些行。InnoDB通过给索引项加锁原创 2021-04-05 15:51:57 · 318 阅读 · 0 评论 -
MySQL探秘(六):InnoDB一致性非锁定读(隔离性)
一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(MVVC)读取当前数据库中行数据的方式。如果读取的行正在执行DELETE或UPDATE操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB会去读取行的一个快照。一致性非锁定读示意图 上图直观地展现了InnoDB一致性非锁定读的机制。之所以称其为非锁定读,是因为不需要等待行上排他锁的释放。快照数据是指该行的之前版本的数据,每行记录可能有多个版本,一般称这种技术为行多版本技术。原创 2021-04-05 15:48:02 · 133 阅读 · 0 评论 -
MySQL探秘(五):InnoDB锁的类型和状态查询
锁是数据库系统区分于文件系统的一个关键特性。数据库使用锁来支持对共享资源进行并发访问,提供数据的完整性和一致性。此外,数据库事务的隔离性也是通过锁实现的。InnoDB在此方面一直优于其他数据库引擎。InnoDB会在行级别上对表数据上锁,而MyISAM只能在表级别上锁,二者性能差异可想而知。InnoDB存储引擎中的锁InnoDB存储引擎实现了如下两种标准的行级锁:共享锁(S Lock),允许事务读取一行 排他锁(X Lock),允许事务删除或更新一行数据如果一个事务T1已经获取了行r的共享锁,原创 2021-04-03 20:54:53 · 239 阅读 · 0 评论 -
MySQL探秘(四):InnoDB的磁盘文件及落盘机制(持久性)
任何一个技术都有其底层的关键基础技术,这些关键技术很有可能也是其他技术的关键技术,学习这些底层技术,就可以一通百通,让你很快的掌握其他技术。如何在磁盘上存储数据,如何使用日志文件保证数据不丢失以及如何落盘,不仅是MySQL等数据库的关键技术,也是MQ消息队列或者其他中间件的关键技术之一。上图详细显示了InnoDB存储引擎的体系架构,从图中可见,InnoDB存储引擎由内存池,后台线程和磁盘文件三大部分组成。接下来我们就来简单了解一下磁盘文件相关的概念和原理。InnoDB的主要的磁盘文件主要分.原创 2021-04-03 20:42:13 · 219 阅读 · 0 评论 -
MySQL探秘(三):InnoDB的内存结构和特性(可靠性和持久性)
MySQL区别于其他数据库的最为重要的特点就是其插件式的表存储引擎。而在众多存储引擎中,InnoDB是最为常用的存储引擎。从MySQL5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。 InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持非锁定读,即默认读操作不会产生锁。 InnoDB通过使用多版本并发控制(MVCC)来获取高并发性,并且实现了SQL标准的4中隔离级别,默认为REPEATABLE级别。同时,使用一种被称为next-k原创 2021-04-03 20:19:08 · 235 阅读 · 0 评论 -
MySQL探秘(二):SQL语句执行过程详解
只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化。 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则能够按照预想的合理的方式运行。 如下图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么:客户端发送一条查询给服务器。 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。 服务器端进行SQL解析、预处理,再由优化器生成原创 2021-04-03 13:07:18 · 85 阅读 · 0 评论 -
磁盘文件读写和数据库读写哪个效率更高
假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读 内容,无关任何排序或查找操作。动态网站一般都是用数据库来存储信息,如果信息的及时性要求不高 可以加入缓存来减少频繁读写数据库。两种方式一般都支持,但是绕过操作系统直接操作磁盘的性能较高,而且安全性也较高,数据库中的磁盘性能一直都是瓶颈,大型数据库一般基于unix系统,当然win下也有,不常用应为wi原创 2021-04-02 12:08:19 · 2957 阅读 · 0 评论 -
为什么 MySQL 使用 B+ 树,而不是 B 树或者 Hash?
大多数人都只会简单说一下 B+ 树和 B 树的区别,但是都没有真正回答 MySQL 为什么选择使用 B+ 树这个问题,我们在这篇文章中就会深入分析 MySQL 选择 B+ 树背后的一些原因。概述首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表的底层存储引擎。我们在使用 SQL 语句创建表时就转载 2021-03-31 16:23:04 · 190 阅读 · 0 评论 -
数据库内部存储结构探索
在这篇文章中,我将会讲解一些数据库存储的内部机制,数据库是如何进行优化操作来提供惊人速度及其优势和缺点。 当我们谈起数据库内部存储结构时,人们都会想到B树或者B+树,但是我们在这里并不会谈论这些数据结构的原理,我们会展示这些数据结构为什么适合作为数据库存储的内部结构以及使用这些数据结构的目的。 传统的关系型数据将数据以B树的形式存储在磁盘上,它们也会在RAM上使用B树维护这些数据的索引,来保证更快的访问速度。插入的行存储在B树的叶子节点上,所有的中间节点用来存储用于导航查询语句的原数据。...原创 2021-03-14 15:12:12 · 273 阅读 · 0 评论 -
数据库锁分类和总结
锁锁是网络数据库中的一个非常重要的概念,当多个用户同时对数据库并发操作时,会带来数据不一致的问题,所以,锁主要用于多用户环境下保证数据库完整性和一致性。帮助理解:以商场的试衣间为例,每个试衣间都可供多个消费者使用,因此,可能出现多个消费者同时需要使用试衣间试衣服。为了避免冲突,试衣间装了锁,某一个试衣服的人在试衣间里把锁锁住了,其他顾客就不能从外面打开了,只能等待里面的顾客试完衣服,从里面把锁打开,外面的人才能进去。数据库锁出现的目的:处理并发问题并发控制的主要采用的技术手段:乐观锁、悲原创 2021-02-17 11:52:35 · 145 阅读 · 0 评论 -
数据库的锁机制及原理
数据库的锁机制,今天彻底理清楚。文章中有参考整理其他一些有价值的博客以及mysql官方文档的内容,如有侵权请联系删除。数据库锁先看一张图自己整理的数据库锁的树形图概要数据库锁一般可以分为两类,一个是悲观锁,一个是乐观锁。 乐观锁一般是指用户自己实现的一种锁机制,假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观锁的实现方式一般包括使用版本号和时间戳。 .原创 2021-02-17 11:45:21 · 394 阅读 · 0 评论 -
B+/-Tree原理及mysql的索引分析
B+/-Tree原理B-Tree介绍B-Tree是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字) 5.非叶子结点的关键字个数=指向儿子的指针个数-1; 6.非叶子结点的关键字:K[1], K[2], ...原创 2021-01-30 20:37:23 · 146 阅读 · 0 评论