![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 82
MySQL 相关总结文档
是个小胖墩儿啊
这个作者很懒,什么都没留下…
展开
-
【转】MySQL 八股文
转自:https://mp.weixin.qq.com/s/c-sy7tM0BmrqMUQFW7C65g一、 基础篇1、关系型和非关系型数据库的区别?关系型数据库的优点:容易理解,因为它采用了关系模型来组织数据;可以保持数据的一致性;数据更新的开销比较小;支持复杂查询(带 where 子句的查询)。非关系型数据库(NoSQL)的优点:无需经过 SQL 层的解析,读写效率高;基于键值对,读写性能很高,易于扩展;可以支持多种类型数据的存储,如图片、文档等;扩展(可分为内存型数据转载 2022-03-31 23:13:47 · 1222 阅读 · 0 评论 -
【转】MySQL 高频面试题,都在这了
转自:https://mp.weixin.qq.com/s/NxQqlaLFIU_veMXQfXkxag索引相关1、什么是索引?索引是一种数据结构,可以帮助我们快速地进行数据的查找。2、索引是个什么样的数据结构?索引的数据结构和具体的存储引擎的实现有关,在 MySQL 中使用较多的索引有 Hash 索引、B+ 树索引等,而我们经常使用的 InnoDB 存储引擎的默认索引实现为 B+ 树索引。3、Hash 索引和 B+ 树索引有什么区别或者说优劣?首先要知道 Hash 索引和 B+ 树索引的底转载 2022-03-30 21:40:10 · 809 阅读 · 0 评论 -
MySQL InnoDB 行级锁总结
MySQL InnoDB 支持行级锁,具体可划分为以下几类。普通的 select 查询是不会加行锁的,如果需要,可以采用以下方式。Next-key Lock 锁由记录锁和间隙锁组合而成,同时 Next-key Lock 是左开右闭区间,而间隙锁是左开右开区间。Next-key Lock 在一些场景下会退化成记录锁或间隙锁。以下总结在 MySQL 8.0 版本下,唯一索引和非唯一索引在不同的 SQL 查询条件的加锁规则。...原创 2022-07-03 22:48:42 · 519 阅读 · 0 评论 -
【转】MySQL 的表锁和行锁
转自:https://mp.weixin.qq.com/s/8LrPHG7XtsvNJJs58yK-0g锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。概述相对其他数据库而言,MySQL 的锁机制比较简单,其最显著的特点是转载 2022-04-01 11:32:31 · 4842 阅读 · 0 评论 -
一条 SQL 查询语句的执行过程
当我们执行一条 MySQL 查询语句时,对于客户端而言是一个很简单的过程,但对于服务端来说其内部却会涉及到一些复杂的组件和处理逻辑。了解 SQL 语句的内部执行原理,有助于我们更好地去处理一些复杂的 SQL 语句,帮助我们定位和解决问题。MySQL 的体系结构Connector:用来支持各种语言和 SQL 的交互,比如 PHP、Python、Java 的 JDBC 等;Management Serveices & Utilities:系统管理和控制工具,包括备份恢复、MySQL 复制、集群原创 2022-03-30 22:57:42 · 543 阅读 · 0 评论 -
【转】一条SQL语句执行得很慢的原因有哪些?
转自:https://mp.weixin.qq.com/s/YKmFEtHcZPBn1S9so0kxYw一、大多数情况是正常的,只是偶尔会出现很慢的情况数据库在刷新脏页当我们要往数据库中插入一条数据或者更新一条数据时,数据库会在内存中把对应字段的数据更新了,但是更新完毕之后,这些更新的字段并不会马上同步持久化到磁盘中去,而是会把这些更新的记录写入到 redo log 日志中去,只有等到空闲的时候才会通过 redo log 里的日志把最新的数据同步到磁盘里。而 redo log 的容量是有限的,所以转载 2022-03-30 23:50:38 · 212 阅读 · 0 评论 -
【转】为什么 MySQL 采用 B+ 树作为索引?
转自:https://xiaolincoding.com/mysql/index/why_index_chose_bpuls_tree.html#%E6%80%8E%E6%A0%B7%E7%9A%84%E7%B4%A2%E5%BC%95%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E6%98%AF%E5%A5%BD%E7%9A%84「为什么 MySQL 采用 B+ 树作为索引?」这句话,是不是在面试时经常出现。要解释这个问题,其实不单单要从数据结构的角度出发转载 2022-03-28 00:52:13 · 816 阅读 · 0 评论 -
【转】从数据页的角度看 B+ 树
转自:https://xiaolincoding.com/mysql/index/page.html#innodb-%E6%98%AF%E5%A6%82%E4%BD%95%E5%AD%98%E5%82%A8%E6%95%B0%E6%8D%AE%E7%9A%84大家背八股文的时候,都知道 MySQL 里的 InnoDB 存储引擎是采用 B+ 树来组织数据的。这点没错,但是大家知道 B+ 树里的节点里存放的是什么吗?查询数据的过程又是怎样的?这次,我们从数据页的角度看 B+ 树,看看每个节点长啥样。I转载 2022-03-28 22:58:21 · 626 阅读 · 0 评论 -
【转】MySQL 的 InnoDB 存储引擎是怎么设计的?
转自:https://mp.weixin.qq.com/s/wr2gJGQSA8QH_lmPh1XOkw对于 MySQL,要记住、或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图:遇到问题,或者学习到新知识点时,就往里套,想一想,这是对应这两张图的哪个模块?是属于具体哪个成员的能力?这其中,第一张图的最底下的存储引擎层(Storage Engines),它决定了 MySQL 会怎样存储数据,怎样读取和写入数据,很大程度上也决定了 MySQL 的转载 2022-03-30 14:42:40 · 148 阅读 · 0 评论 -
【转】揭开 Buffer Pool 的面纱
转自:https://xiaolincoding.com/mysql/buffer_pool/buffer_pool.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E6%9C%89-buffer-pool为什么要有 Buffer Pool?虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。要想提升查询性能,加个缓存就行了嘛。所以,当数据从磁盘中取出后,缓存到内存中,下次再查询同样的数据的时候,直接从内存中读取。为此转载 2022-03-30 12:19:25 · 133 阅读 · 0 评论 -
【转】MySQL 的 undo log、redo log、binlog 的区别?
转自:https://mp.weixin.qq.com/s/t08ttQmgXRVhnRoH2OKNvQ与不同引擎的关系核心作用生命周期日志类型undo log属于 InnoDB 引擎独有回滚,保证事务的“原子性”,事务日志事务开始前,以类似“快照”的方式记录现场逻辑日志redo log属于 InnoDB 引擎独有重做,保证事务的“持久性”,事务日志事务开始后记录,prepare 阶段落盘物理日志binlog工作在 MySQL server 层,转载 2022-03-31 13:24:29 · 108 阅读 · 0 评论 -
MVVC 多版本并发控制
事务的四种隔离级别读未提交;读已提交;可重复读;串行化。什么是脏读?简单来说,就是读取了一条未提交的数据。什么是不可重复读?一个事务读取了另一个事务修改后的记录,强调的是 update 和 delete,只需要锁住满足条件的记录即可。什么是幻读?一个事务读取了另一个事务插入的数据,强调的是 insert,要锁住满足条件及相近的记录。MYSQL 中默认的隔离级别是可重复读,可以解决脏读和不可重复读的问题,但是不能解决幻读的问题。 Oracle 中默认的是 Read Co原创 2022-04-02 16:15:19 · 1296 阅读 · 2 评论 -
使用 B+ 树 or 使用跳表?
使用 B+ 树 or 使用跳表?原创 2022-09-17 01:44:17 · 1094 阅读 · 2 评论 -
【转】索引失效有哪些?
转自:https://xiaolincoding.com/mysql/index/index_lose.html#%E7%B4%A2%E5%BC%95%E5%A4%B1%E6%95%88%E6%9C%89%E5%93%AA%E4%BA%9B对索引使用左或者左右模糊匹配当我们使用左或者左右模糊匹配时(即"like %xx"或者"like %xx%"),会造成索引失效。但在使用前缀匹配时(即"like xx%"),却会走索引扫描。因为索引 B+ 树是按照索引值有序排列存储的,只能根据前缀进行比较。转载 2022-05-05 17:36:32 · 503 阅读 · 0 评论 -
【转】SQL 优化有哪些技巧?
转:https://mp.weixin.qq.com/s/ChwnzSCwc8HU4QQLz7VNPQ1、创建索引执行没有索引的 SQL 语句,肯定要走全表扫描,慢是肯定的。这种查询毫无疑问是一个慢 SQL 查询。是不是要收集所有的 where 查询条件,然后针对所有的组合都创建索引呢?答案肯定是否定的。MySQL 为了提升数据查询速率,采用 B+ 树结构,通过空间换时间的设计思想。另外每次对表数据做更新操作时,都要调整对应的索引树,执行效率肯定会受影响。阿里巴巴的开发者手册中,建议单表转载 2022-05-23 00:22:59 · 119 阅读 · 0 评论 -
在 MySQL 某数据表中针对 username 字段建立唯一索引后,基于万级数据量和百万级数据量分别进行查询某用户 A,请问两次查询的性能耗时对比如何?
在 MySQL 某数据表中针对 username 字段建立唯一索引后,基于万级数据量和百万级数据量分别进行查询某用户 A,请问两次查询的性能耗时对比如何?原创 2024-04-02 17:43:53 · 854 阅读 · 0 评论 -
MySQL 的主从复制
MySQL 集群通常是指 MySQL 的主从复制架构。通常使用 MySQL 主从复制来解决 MySQL 单点故障的问题,其通过逻辑复制的方式把主库的变更同步到从库上,主备之间无法保证严格一致的模式。于是MySQL 的主从复制带来了主从“数据一致性”的问题。MySQL的复制分为:全同步复制、异步复制、半同步复制。全同步复制当主库执行完一个事务,并且全部的从库都执行完了该事务后,才能返回给客户端。那么主库完成一个事务的时间就会被拉长,因此全同步复制的性能必然会受到严重的影响。异步复制早期的 MySQ原创 2022-03-31 17:54:32 · 158 阅读 · 0 评论 -
MySQL 的主从架构
数据库主从概念、优点及用途主从数据库是什么意思呢,主是主库的意思,从是从库的意思。数据库主库对外提供读写的操作,从库对外提供读的操作。数据库为什么需要主从架构呢?高可用,实时灾备,用于故障切换。比如主库挂了,可以切从库。读写分离,提供查询服务,减少主库压力,提升性能。备份数据,避免影响业务。数据库主从复制原理主数据库有个 binlog 二进制文件,记录了所有增删改的 SQL 语句(binlog 线程);从数据库把主数据库的 binlog 文件的 SQL 语句复制到自己的中继日志 re原创 2022-03-31 20:49:39 · 2880 阅读 · 0 评论 -
MySQL 查询 JSON 数组是否包含特定的值
MySQL 查询 JSON 数组是否包含特定的值原创 2023-10-31 17:25:59 · 1531 阅读 · 0 评论 -
MySQL 全文索引
MySQL 全文索引原创 2023-11-02 11:24:33 · 373 阅读 · 0 评论 -
MySQL 深分页优化
而在第二条语句中,offset 设置为 6000000,则会在 InnoDB 的主键索引中获取第 0 ~ 6000000 + 10 条完整的行数据,返回给 server 层后根据 offset 的数值进行丢弃,只保留后面的 size 条数据,放到 server 层的结果集中,最后返回给客户端。针对第一条语句,server 层会调用 InnoDB 接口,在 InnoDB 的主键索引中获取到第 0 ~ 10 条完整的行数据,一次性返回给 server 层,并放到 server 层的结果集中,最后返回给客户端。原创 2023-09-20 23:40:05 · 406 阅读 · 0 评论 -
MySQL 的隐式转换
当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL 会做一些隐式转换(Implicit type conversion):若字符串是以数字开头,并且全部都是数字,则转换的数字结果是整个字符串;部分是数字,则转换的数字结果是截止到第一个不是数字的字符为止;若字符串不是以数字开头,则转换的数字结果是 0。varchar str = "123dafa" // 转换为数字是 123SELECT '123dafa' + 1; // 124varchar原创 2022-03-31 21:11:26 · 1976 阅读 · 0 评论 -
MySQL 的慢查询日志
MySQL 的慢查询,全名是慢查询日志,是 MySQL 提供的一种日志记录,用来记录在 MySQL 中响应时间超过阀值的语句。具体环境中,运行时间超过 long_query_time 值(默认值为 10)的 SQL 语句,则会被记录到慢查询日志中。默认情况下,MySQL 数据库并不启动慢查询日志,需要手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件和数据库表。MySQL 慢查询的相关参数slow_原创 2022-03-31 21:05:11 · 650 阅读 · 0 评论 -
【转】盘点 MySQL 慢查询的 12 个原因
转:https://mp.weixin.qq.com/s/gz-wQPsaerf4k7ymG8DiDASQL 没加索引很多时候,我们的慢查询都是因为没有加索引。如果没有加索引的话,是会导致全表扫描的。因此,应考虑在 where 的条件列建立索引,尽量避免全表扫描。select * from user_info where name ='捡田螺的小男孩公众号' ;// 添加索引alter table user_info add index idx_name (name);SQL 索引不生转载 2022-06-01 21:13:00 · 6551 阅读 · 0 评论 -
MySQL 数据表主键设计,选择自增 id 还是 UUID 还是雪花 id?
前言在 MySQL 数据表的设计中,官方推荐我们不要使用 UUID 或者其他不连续不重复的 id,而是推荐使用连续自增的主键 id(auto_increment),那么为什么会这样建议呢,我们来简单地分析一下。背景随着现在许多项目都涉及到了分布式或者微服务,后续或多或少都会针对具体的服务需求对数据库进行拆分(分库分表),这里就会产生一个问题,拆分后的 id 该如何妥善处理?例如,在之前的业务中,所有的数据内容都是存放在同一张数据表中的,主键 id 都是自增的,这当然没有任何问题。但是当单表的数据量上原创 2022-03-31 21:27:56 · 7511 阅读 · 0 评论