MySQL
文章平均质量分 84
柯西极限存在准则
现任于西安华为研究所,阿里云社区专家博主,从事DBA的ISFJ+摩羯
展开
-
如何提高sql执行效率
在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。原创 2024-01-22 10:49:00 · 1049 阅读 · 0 评论 -
mysql中MyISAM和InnoDB的区别是什么
区别:1、InnoDB支持事务,MyISAM不支持;2、InnoDB支持外键,而MyISAM不支持;3、InnoDB是聚集索引,而MyISAM是非聚集索引;4、Innodb不支持全文索引,而MyISAM支持全文索引;5、InnoDB支持表、行级锁,而MyISAM支持表级锁;6、InnoDB表必须有唯一索引,而Myisam可以没有;7、存储文件不同。原创 2024-01-22 10:46:56 · 476 阅读 · 0 评论 -
主从复制的原理、方法及详解
当MySQL数据库执行数据的增、删、改操作时,会将这些事件记录到二进制日志中,这些日志会被发送到每台从服务器上。原创 2024-01-20 11:14:57 · 816 阅读 · 0 评论 -
MySQL数据库锁定机制
MySQL数据库中表级锁定主要是MyISAM、memory、CSV等一些非事务性存储引擎,使用行级锁定主要是InnoDB存储引擎和NDB cluster存储引擎,页级锁定主要是BerkleyDB存储引擎原创 2024-01-20 11:12:51 · 1001 阅读 · 0 评论 -
9.3 【MySQL】系统表空间
information_schema系统数据库需要注意一点的是,用户是不能直接访问 InnoDB 的这些内部系统表的,除非你直接去解析系统表空间对应文件系统上的文件。原创 2023-11-15 15:29:58 · 193 阅读 · 0 评论 -
9.2.5.2 【MySQL】XDES 类型
PAGE_BTR_SEG_LEAF 记录着叶子节点段对应的 INODE Entry 结构的地址是哪个表空间的哪个页面的哪个偏移量, PAGE_BTR_SEG_TOP 记录着非叶子节点段对应的 INODE Entry 结构的地址是哪个表空间的哪个页面的哪个偏移量。原创 2023-10-07 10:21:04 · 96 阅读 · 0 评论 -
9.2.4 【MySQL】段的结构
段不对应表空间中某一个连续的物理区域,而是一个逻辑上的概念,由若干个零散的页面以及一些完整的区组成。像每个区都有对应的XDES Entry来记录这个区中的属性一样,定义了一个INODE Entry结构来记录段中的属性。原创 2023-09-22 17:16:01 · 221 阅读 · 0 评论 -
9.2.3.1 【MySQL】XDES Entry链表
综上所述,表空间是由若干个区组成的,每个区都对应一个 XDES Entry 的结构,直属于表空间的区对应的 XDESEntry 结构可以分成 FREE 、 FREE_FRAG 和 FULL_FRAG 这3个链表;每个段可以附属若干个区,每个段中的区对应的 XDES Entry 结构可以分成 FREE 、 NOT_FULL 和 FULL 这3个链表。每个链表都对应一个 List Base Node 的结构,这个结构里记录了链表的头、尾节点的位置以及该链表中包含的节点数。正是因为这些链表的存在,管理这些区才容易原创 2023-09-21 22:51:18 · 138 阅读 · 0 评论 -
9.2 【MySQL】独立表空间结构
XDES 类型:全称是 extent descriptor ,用来登记本组256个区的属性,也就是说对于在 extent 256区中的该类型页面存储的就是 extent 256 ~ extent 511 这些区的属性,对于在 extent 512 区中的该类型页面存储的就是 extent 512 ~ extent 767 这些区的属性。原创 2023-09-21 22:48:35 · 240 阅读 · 0 评论 -
第9章 【MySQL】InnoDB的表空间
表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个页的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。原创 2023-09-21 14:41:33 · 183 阅读 · 0 评论 -
8.4 【MySQL】文件系统对数据库的影响
对于 InnoDB 的独立表空间来说,每个表的数据都会被存储到一个与表名同名的 .ibd 文件中;对于 MyISAM存储引擎来说,数据和索引会分别存放到与表同名的 .MYD 和 .MYI 文件中。这些文件会随着表中记录的增加而增大,它们的大小受限于文件系统支持的最大文件大小。原创 2023-09-19 14:51:13 · 290 阅读 · 1 评论 -
第8章 MySQL的数据目录
像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在磁盘上的,而操作系统用来管理磁盘的又被称为 文件系统 ,所以用专业一点的话来表述就是:像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统。原创 2023-09-19 14:37:25 · 209 阅读 · 0 评论 -
7.4.4 【MySQL】索引字符串值的前缀
B+ 树索引在空间和时间上都有代价,所以没事儿别瞎建索引。B+ 树索引适用于下边这些情况:全值匹配匹配左边的列匹配范围值精确匹配某一列并范围匹配另外一列用于排序用于分组在使用索引时需要注意下边这些事项:只为用于搜索、排序或分组的列创建索引为列的基数大的列创建索引索引列的类型尽量小可以只对字符串值的前缀建立索引只有索引列在比较表达式中单独出现才可以适用索引。原创 2023-09-19 10:33:11 · 279 阅读 · 2 评论 -
7.2.7 【MySQL】用于分组
列的基数 指的是某一列中不重复数据的个数,比方说某个列包含值 2, 5, 8, 2, 5, 8, 2, 5, 8 ,虽然有 9 条记录,但该列的基数却是 3 。也就是说,在记录行数一定的情况下,列的基数越大,该列中的值越分散,列的基数越小,该列中的值越集中。这个 列的基数 指标非常重要,直接影响我们是否能有效的利用索引。原创 2023-09-19 09:38:25 · 162 阅读 · 0 评论 -
7.2.4 【MySQL】匹配范围值
对于 联合索引 有个问题需要注意, ORDER BY 的子句后边的列的顺序也必须按照索引列的顺序给出,如果给出ORDER BY phone_number, birthday, name 的顺序,那也是用不了 B+ 树索引,这种颠倒顺序就不能使用索引的。原创 2023-09-19 09:13:10 · 217 阅读 · 0 评论 -
第7章 【MySQL】B+树索引的使用
每次对表中的数据进行增、删、改操作时,都需要去修改各个 B+ 树索引。而且我们讲过, B+ 树每层节点都是按照索引列的值从小到大的顺序排序而组成了双向链表。不论是叶子节点中的记录,还是内节点中的记录(也就是不论是用户记录还是目录项记录)都是按照索引列的值从小到大的顺序而形成了一个单向链表。而增、删、改操作可能会对节点和记录的排序造成破坏,所以存储引擎需要额外的时间进行一些记录移位,页面分裂、页面回收啥的操作来维护好节点和记录的排序。原创 2023-09-14 08:44:58 · 133 阅读 · 0 评论 -
6.2.3 【MySQL】InnoDB的B+树索引的注意事项
B+树本质上就是一个大的多层级目录,每经过一个目录时都会过滤掉许多无效的子目录,直到最后访问到存储真实数据的目录。InnoDB 的一个数据页至少可以存放两条记录。原创 2023-09-13 09:35:50 · 133 阅读 · 0 评论 -
6.2.2 【MySQL】InnoDB中的索引方案
我们把具有这两种特性的 B+ 树称为 聚簇索引 ,所有完整的用户记录都存放在这个 聚簇索引 的叶子节点处。这种 聚簇索引 并不需要我们在 MySQL 语句中显式的使用 INDEX 语句去创建(后边会介绍索引相关的语句),InnoDB 存储引擎会自动的为我们创建聚簇索引。另外有趣的一点是,在 InnoDB 存储引擎中, 聚簇索引 就是数据的存储方式(所有的用户记录都存储在了 叶子节点 ),也就是所谓的索引即数据,数据即索引。原创 2023-09-11 14:41:36 · 222 阅读 · 0 评论 -
第6章 【MySQL】B+树索引
各个数据页可以组成一个 双向链表 ,而每个数据页中的记录会按照主键值从小到大的顺序组成一个 单向链表 ,每个数据页都会为存储在它里边儿的记录生成一个页目录 ,在通过主键查找某条记录的时候可以在 页目录 中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。原创 2023-09-11 11:19:53 · 196 阅读 · 0 评论 -
5.5 【MySQL】Page Header(页面头部)
为保证从内存中同步到磁盘的页的完整性,在页的首部和尾部都会存储页中数据的校验和和页面最后修改时对应的 LSN 值,如果首部和尾部的校验和和 LSN 值校验不成功的话,就说明同步过程出现了问题。原创 2023-09-11 10:12:12 · 342 阅读 · 0 评论 -
5.4 【MySQL】页目录
假如新插入的一条记录的主键值比上一条记录的主键值大,我们说这条记录的插入方向是右边,反之则是左边。用来表示最后一条记录插入方向的状态就是 PAGE_DIRECTION 。原创 2023-09-11 10:02:15 · 205 阅读 · 0 评论 -
第5章 【MySQL】InnoDB数据页结构
不论我们怎么对页中的记录做增删改操作,InnoDB始终会维护一条记录的单链表,链表中的各个节点是按照主键值由小到大的顺序连接起来的。原创 2023-09-11 09:16:42 · 127 阅读 · 0 评论 -
4.3.3.1 【MySQL】CHAR(M)列的存储格式
我们知道 Compact 行格式在 CHAR(M) 类型的列中存储数据的时候还挺麻烦,分变长字符集和定长字符集的情况,而在 Redundant 行格式中十分干脆,不管该列使用的字符集是啥,只要是使用 CHAR(M) 类型,占用的真实数据空间就是该字符集表示一个字符最多需要的字节数和 M 的乘积。比方说使用 utf8 字符集的 CHAR(10) 类型的列占用的真实数据空间始终为 30 个字节,使用 gbk 字符集的 CHAR(10) 类型的列占用的真实数据空间始终为 20 个字节。由此可以看出来,使用 Red原创 2023-09-08 22:08:24 · 496 阅读 · 0 评论 -
第4章 【MySQL】InnoDB记录结构
MySQL 服务器上负责对表中数据的读取和写入工作的部分是 存储引擎 ,而服务器又支持不同类型的存储引擎,比如 InnoDB 、 MyISAM 、 Memory 啥的,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,真实数据在不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如 Memory 都不用磁盘来存储数据,也就是说关闭服务器后表中的数据就消失了。原创 2023-09-07 10:06:30 · 199 阅读 · 0 评论 -
3.3.2 【MySQL】客户端和服务器通信中的字符集
如果接收 0xE68891 这个字节串的程序按照 utf8 字符集进行解码,然后又把它按照 gbk 字符集进行编码,最后编码后的字节串就是 0xCED2 ,我们把这个过程称为字符集的转换 ,也就是字符串 '我' 从 utf8 字符集转换为gbk 字符集。原创 2023-09-06 15:41:44 · 310 阅读 · 0 评论 -
3.3 【MySQL】字符集和比较规则的应用
charset_demo_db 数据库的字符集和比较规则就是我们在创建语句中指定的。需要注意的一点是:character_set_database 和 collation_database 这两个系统变量是只读的,我们不能通过修改这两个变量的值而改变当前数据库的字符集和比较规则。原创 2023-09-06 15:17:02 · 282 阅读 · 0 评论 -
第3章 【MySQL】字符集和比较规则
每种字符集对应若干种比较规则,每种字符集都有一种默认的比较规则, SHOW COLLATION 的返回结果中的Default 列的值为 YES 的就是该字符集的默认比较规则,比方说 utf8 字符集默认的比较规则就是utf8_general_ci 。原创 2023-09-06 11:17:21 · 671 阅读 · 0 评论 -
2.4.3 【MySQL】设置系统变量
有一些系统变量并不是针对单个客户端的,比如允许同时连接到服务器的客户端数量 max_connections ,查询缓存的大小 query_cache_size ,这些公有的系统变量让某个客户端私有显然不合适。原创 2023-09-06 10:01:21 · 494 阅读 · 0 评论 -
2.3 【MySQL】命令行和配置文件中启动选项的区别
在命令行上指定的绝大部分启动选项都可以放到配置文件中,但是有一些选项是专门为命令行设计的,比方说defaults-extra-file、 defaults-file 这样的选项本身就是为了指定配置文件路径的,再放在配置文件中使用就没啥意义了。原创 2023-08-28 11:59:36 · 1227 阅读 · 0 评论 -
Linux安装MySQL8
查询下本机mysql是否卸载干净。原创 2023-08-28 11:45:58 · 215 阅读 · 0 评论 -
第2章 MySQL的调控按钮-启动选项和系统变量
每个设置项都有各自的默认值,比方说服务器允许同时连入的客户端的默认数量是 151 ,表的默认存储引擎是 InnoDB ,我们可以在程序启动的时候去修改这些默认值,对于这种在程序启动时指定的设置项也称之为启动选项(startup options),这些选项控制着程序启动后的行为。原创 2023-08-26 00:36:29 · 736 阅读 · 0 评论 -
1.7 【MySQL】常用存储引擎
存储引擎是负责对表中的数据进行提取和写入工作的,我们可以为不同的表设置不同的存储引擎,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。原创 2023-08-25 17:54:17 · 412 阅读 · 0 评论 -
错误:依赖检测失败: mysql-community-libs(x86-64) >= 5.7.9 被 (已安裝) mysql-community-li
错误原因:没有删除之前安装的依赖问题。原创 2023-08-25 17:46:31 · 948 阅读 · 0 评论 -
1.6 服务器处理客户端请求
客户端进程可以采用我们上边介绍的 TCP/IP、 命名管道或共享内存 、 Unix域套接字 这几种方式之一来与服务器进程建立连接,每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。原创 2023-08-25 11:11:47 · 923 阅读 · 0 评论 -
1.4 启动MySQL客户端程序
各个参数的意义如下: |参数名|含义| |:--:|:--| | -h |表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填 localhost 或者 127.0.0.1 。也可以写作 --host=主机名 的形式。| | -u |表示用户名。也可以写作 --user=用户名 的形式。| | -p |表示密码。也可以写作 --password=密码 的形式。|原创 2023-08-25 09:59:55 · 107 阅读 · 0 评论 -
第1章 认识MySQL
以微信为例,该应用由两部分组成,一部分是客户端程序,一部分是服务器程序。客户端可能有很多种形式,比如手机APP,电脑软件或者是网页版微信,每个客户端都有一个唯一的用户名,就是你的微信号,另一方面,腾讯公司在他们的机房里运行着一个服务器软件,我们平时操作微信其实都是用客户端来和这个服务器来打交道。原创 2023-08-25 08:49:09 · 69 阅读 · 0 评论 -
MySQL的四种主要存储引擎
MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。若要修改默认引擎,可以修改配置文件中的default-storage-engine。可以通过:showvariableslike'default_storage_engine';查看当前数据库到默认引擎。原创 2023-07-19 17:57:17 · 1396 阅读 · 0 评论