一、写在前知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Mysql干就完事了!二、来辣!MyISAM表把自增主键最大id记录到文件,重启也不会丢。InnoDB记录到内存,重启数据库和OPTIMIZE操作会丢。Heap表存在于内存,用于临时高速存储。BLOB和TEXT不允许,只能=>=InnoDB支持的4中隔离级别,及逐级之间的区别。BLOB和TEXT区别:对BLOB值进行排序和比较大小时区分大小写,对TEXT值不区分。每个MyISAM表以三个文件存储在磁盘:表定义:“.frm”;数据文件:“.MYD”(MYDATA);索引文件:“.MYI”(MYINDEX)。MySQL表格类型:M
先大体看一下MySQL的SQLlayer层的一个架构流程: 对一些关键模块做一下简单的描述:1. 初始模块:初始一些参数,比如初始myinit配置文件(在安装的根目录下)里的一些参数。2. 连接管理模块:启动监听,监听连接请求3. 连接进程模块:可以理解为线程池4. 用户模块:检验用户,令牌和权限5. 命令分发器:处理不同类型的请求6. 查询缓存模块:做缓存处理,做查询的cache,可以理解为一个Map,查询语句为key,结果值为value7. 日志记录模块8. 命令解析器(parser):对于不同类型的sql语句进行处理分发,select:查询优化器,dml:表变更模块,ddl:表维
先大体看一下MySQL的SQLlayer层的一个架构流程: 对一些关键模块做一下简单的描述:1. 初始模块:初始一些参数,比如初始myinit配置文件(在安装的根目录下)里的一些参数。2. 连接管理模块:启动监听,监听连接请求3. 连接进程模块:可以理解为线程池4. 用户模块:检验用户,令牌和权限5. 命令分发器:处理不同类型的请求6. 查询缓存模块:做缓存处理,做查询的cache,可以理解为一个Map,查询语句为key,结果值为value7. 日志记录模块8. 命令解析器(parser):对于不同类型的sql语句进行处理分发,select:查询优化器,dml:表变更模块,ddl:表维
近日, 在一个小型项目中, 遇到了一个触及我知识盲区的bug. 项目用的是MySQL5.7.25, 其中有一张表 config_data,包含四个字段,id,name,value,expireAt.其中id为主键,name建有唯一索引,表的用途大概就是存放一些有时效性的配置.以上就是这次故事的背景.(不要问我为什么要用这么奇怪的方式处理需要过时的配置,项目太简陋以至只有一台虚拟主机和一个数据库,别的什么都没了,包括Redis) 这张表的使用场景大致为,假设需要使用某配置a,先尝试从表中查找a,若找到,判断是否过期,过期或者值不存在则从外部获取配置的值并存入表中,以便下次使用. 伪代码流程如下:
近日, 在一个小型项目中, 遇到了一个触及我知识盲区的bug. 项目用的是MySQL5.7.25, 其中有一张表 config_data,包含四个字段,id,name,value,expireAt.其中id为主键,name建有唯一索引,表的用途大概就是存放一些有时效性的配置.以上就是这次故事的背景.(不要问我为什么要用这么奇怪的方式处理需要过时的配置,项目太简陋以至只有一台虚拟主机和一个数据库,别的什么都没了,包括Redis) 这张表的使用场景大致为,假设需要使用某配置a,先尝试从表中查找a,若找到,判断是否过期,过期或者值不存在则从外部获取配置的值并存入表中,以便下次使用. 伪代码流程如下:
作者:郑啟龙摘要:对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是B+树结构,可以加速SQL查询。但对于B+树索引,它到底“长”得什么样子,它具体如何由一个个字节构成的,这些的基础知识鲜有人深究。本篇文章从MYSQL行记录开始说起,层层递进,包括数据页,B+树聚簇索引,B+树二级索引,最后在文章末尾给出MYSQL索引的建议。文章涉及较多基础知识,内容较为枯燥,因此采用较多的图片补充说明,希望能对读者有帮助。A.一条记录存储格式:COMPACT行记录结构mysql是关系型数据库,每一行记录都是表结构定义的关系的显示表达。在脑中很直观地想到,记录存储时也可能按行存储。的确,m
作者:郑啟龙摘要:对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是B+树结构,可以加速SQL查询。但对于B+树索引,它到底“长”得什么样子,它具体如何由一个个字节构成的,这些的基础知识鲜有人深究。本篇文章从MYSQL行记录开始说起,层层递进,包括数据页,B+树聚簇索引,B+树二级索引,最后在文章末尾给出MYSQL索引的建议。文章涉及较多基础知识,内容较为枯燥,因此采用较多的图片补充说明,希望能对读者有帮助。A.一条记录存储格式:COMPACT行记录结构mysql是关系型数据库,每一行记录都是表结构定义的关系的显示表达。在脑中很直观地想到,记录存储时也可能按行存储。的确,m
在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询的情况,这究竟是什么原因呢?本篇文章带你一下学习一下。1.MyISAM存储引擎计数为什么这么快?我们总有个错觉,就是感觉MyISAM引擎的count计数要比InnoDB引擎更快,实际这不是错觉。MyISAM引擎把表的总行数单独记录在磁盘上,查询的时候可以直接返回,不需要再累加统计。但是当SQL查询中有where条件的时候,就无法再使用表的总行数了,还是需要乖乖的进行累加统计,查询性能也就跟InnoD
在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询的情况,这究竟是什么原因呢?本篇文章带你一下学习一下。1.MyISAM存储引擎计数为什么这么快?我们总有个错觉,就是感觉MyISAM引擎的count计数要比InnoDB引擎更快,实际这不是错觉。MyISAM引擎把表的总行数单独记录在磁盘上,查询的时候可以直接返回,不需要再累加统计。但是当SQL查询中有where条件的时候,就无法再使用表的总行数了,还是需要乖乖的进行累加统计,查询性能也就跟InnoD
MySQL架构:采用C/S架构,即客户端/服务器。客户端和服务器区分开,通过客户端发送请求来和服务器交互。过程:用户通过开发的应用程序来访问数据库(C/S),应用程序通过连接器(connecter)连接到数据库。连接器包含了各种开发语言的接口,连接完成后MySQL会分配一个线程提供服务,执行对应操作的时候就会调用MySQL定义好的接口组件来接收请求。把sql语句解析完成后,结合当前数据库状态来优化对应操作。mysql利用caches和buffer来提高系统系统性能。数据读出和写入的时候会通过存储引擎来选择数据的相关操作,最后写入磁盘或内存。目前主流的存储引擎:存储引擎:MySQL管理数据文件的