2023-11-13 23:31
AI 辅助 MySQL|学习路线
AI 辅助 MySQL|学习路线一、基础知识一)数据类型需要了解 MySQL 的数据类型,在实际使用中才能为每个字段选择适合的类型。1、数值类型: INT, FLOAT, DECIMAL 等2、字符串类型: VARCHAR, CHAR 等3、日期和时间类型: DATE, DATETIME, TIMESTAMP 等4、其他常用类型: BOOLEAN, ENUM, SET 等二)数据操作语言 (DML)这就是我们常说的 CURD,吃饭的家伙得了解。1、插入数据: INSERT INTO2、查询数据: SELECT3、更新数据: UPDATE4、删除数据: DELETE三)数据定义语言 (DDL)表相关调整,业务常变动,改表要学会!1、创建数据库: CREATE DATABASE2、创建表: CREATE TABLE3、添加约束: ALTER TABLE4、修改表结构: ALTER TABLE5、删除表: DROP TABLE6、索引管理: CREATE INDEX, DROP INDEX四)存储过程现在业务上基本很少使用存储过程,但是使用存储过程进行造数据是真的好用。1、存储过程的概念和作用2、创建存储过程: CREATE PROCEDURE3、调用存储过程: CALL五)常用函数查数据必备技能,学会从 360 个维度不同姿势查询数据。1、字符串函数: CONCAT, SUBSTRING, LENGTH 等2、数值函数: SUM, AVG, MAX, MIN 等3、日期和时间函数: NOW, DATE_FORMAT, TIMESTAMPDIFF 等4、条件函数: IF, CASE WHEN 等六)联表查询不建议联表查询,但是技能你得掌握。1、内连接: INNER JOIN2、外连接: LEFT JOIN, RIGHT JOIN, FULL JOIN3、自连接: 在同一表中进行连接二、进阶知识一)性能监控出现问题时候要知道如何排查,快速定位问题。1、show profile:查询剖析工具,可以指定具体的性能、IO 等信息2、show processlist:查看所有连接的线程个数,来观察是否有大量线程处于不正常的状态或者其他不正常的特征,特别是死锁线程3、slow_query_log:定位慢 SQL 语句,解决潜在的性能问题二)SQL 执行计划通过分析 SQL 的执行计划,就知道什么时候该给表添加索引,使用哪个索引来查找记录从而让 SQL 语句运行更快。1、id:该语句的唯一标识2、select_type:查询类型3、table:访问的表名4、partitions:当前查询匹配记录的分区5、type:连接类型6、possible_keys:指出 MySQL 可能使用的索引7、key:显示 MySQL 实际决定使用的索引,如果没有选择索引,键是 NULL8、key_len:使用索引的长度,如果没有选择索引,键是 NULL9、ref:显示使用哪个列或常数与 key 一起从表中选择行10、rows:执行查询时必须检查的行数,多行之间的数据相乘可以估算要处理的行数11、filtered:执行查询时必须检查的行数,多行之间的数据相乘可以估算要处理的行数12、extra:包含 MySQL 解决查询的详细信息三)索引索引是学习数据库必知必会的一个内容,绝大部分的慢 SQL 都是由于索引设置或使用不合理导致的,学会正确使用索引能够避免 90% 以上的慢 SQL。1、索引的用处2、索引分类 1)主键索引 2)唯一索引 3)前缀索引 4)全文索引 5)组合索引 6)普通索引3、索引的数据结构1)哈希:通过索引的 key 进行一次 Hash 计算,就可以快速获取磁盘文件指针,对于指定索引查找文件非常快,但是对于范围查找没法支持,有时候也会出现 Hash 冲突的情况。2)二叉树:左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据。3)红黑树:红黑树是平衡树的一种,它复杂的定义和规则都是为了保证树的平衡性。4)B 树:B树是一种多路搜索树,它的每个节点都可以拥有多于两个孩子节点。M路的B树最多拥有M个孩子节点,设计成多路是为了降低树的高度。5)B+ 树:B+ 树是在 B 树的基础上进行改造,它的数据都在叶子节点,同时叶子节点之间还加了指针形成链表。4、面试常见词 1)回表 2)索引下推 3)最左匹配 4)覆盖索引5、索引优化细节四)SQL 执行过程当你在客户端输入一条 SQL 查询语句后,MySQL 是如何处理和执行这条语句的呢?涉及到 MySQL 的很多模块和组件,以及它们之间的交互和协作。1、连接器:连接器负责跟客户端建立连接,获取权限、维持和管理连接2、查询缓存:当执行查询语句的时候,会先去查询缓存中查看结果,找到则直接返回3、分析器:进行词法和语法分析,判断是否存在词法或语法上的错误信息4、优化器:MySQL 基于成本优化,选择最优索引和表的连接关系等5、执行器:先从存储引擎中找到数据,如果在内存中直接返回,如果不在内存中,查询后返回五)存储引擎存储引擎是 MySQL 的组件,用于处理不同表类型的SQL操作。使用合适的存储引擎,将会提高整个数据库的性能 。你想过 MySQL 的存储引擎为什么默认是 InnoDB 嘛?1、MyISAM、InnoDB、MEMORY、MERGE 引擎信息2、MyISAM 和 InnoDB 的区别?面试高频问题3、InnoDB 核心概念1)表空间:InnoDB 将所有数据(包括表数据,索引,回滚信息,插入缓冲索引页,系统事务信息,二次写缓冲)逻辑地放在一个空间中,称为共享表空间。2)段:一个索引(InnoDB 都是 B+ 索引)由两个段管理,叶子节点段(leaf segment)和非叶子节点段(non leaf segment)3)区:InnoDB 申请空间的最小单位,由连续页组成的空间,大小为 1MB,保持不变。4)页:InnoDB访问的最小单位,默认16KB。一个区中一共有64个连续的页。六)日志日志是 MySQL 数据库的重要组成部分,记录着数据库运行期间各种状态信息。MySQL 日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。1、事务日志1)重做日志 (Redo Log):InnoDB 存储引擎层的日志,通常是物理日志,记录的是数据页的更新内容。确保事务的持久性,防止在发生故障的时间点,尚有脏页未写入磁盘。在重启 MySQL 服务的时候,根据 redo log 进行重做恢复到最后一次提交事务的数据点,从而达到事务的持久性这一特性。2)撤销日志 (Undo Log):记录数据被修改前的内容(逻辑日志,生成与操作相反的语句),可以用来在事务失败时进行 rollback,用于回滚。同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。3)doublewrite buffer2、二进制日志 (Binlog):归档日志(二进制日志):记录的是操作而不是数据值,在主从复制中,从库利用主库上的 Binlog 进行重播,实现主从同步,还可用于数据库的基于时间点的还原。3、错误日志 (Error Log):主要记录MySQL服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。七)事务事务(Transaction)是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行。如果没有事务,那么数据库的数据就会发生各种错乱问题。1、事务的概念和特性2、事务隔离级别 1)读未提交(Read Uncommitted) 2)读已提交(Read Committed) 3)可重复读(Repeated Read) 4)串行化(Serializable)3、ACID 属性 1)原子性(Atomicity) 2)一致性(Consistency) 3)隔离性(isolation) 4)持久性(durability)4、事务的并发控制八) 锁锁是数据库系统区分与文件系统的一个关键特性,为了保证数据一致性,必须有锁的介入。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。1、锁的概念和作用2、锁的类型 1)共享锁 2)排他锁 3)意向锁 4)记录锁 5)间隙锁 6)临键锁 7)插入意向锁 8)自增锁 9)死锁3、锁的兼容性4、加锁过程5、事务隔离级别和锁的关系6、MVCC (多版本并发控制) 1)特点:读不加锁,读写互斥 2)MVCC 的概念和原理 3)快照读和当前读三、高阶知识一)分布式事务随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用,分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。1、CAP 理论2、Base 理论3、二阶段提交4、三阶段提交5、一致性问题6、分布式事务解决方案1)XA 方案2)Seata 方案3)TCC 事务二)MySQL 集群假设你有一个非常大的网站,每天有数百万用户访问,数据库的读写请求非常庞大。为了应对这个高负载的情况,单个服务器可能无法满足需求,因此你需要构建一个 MySQL 集群。集群主从机器的设计是为了实现高可用性和水平扩展。这就像是你有一个主服务器和多个从服务器,它们共同工作来处理用户请求和数据库操作。1、主从同步1)传统的主从复制 2)半同步复制 3)组复制2、读写分离架构二)分库分表互联网发展的发展,也带来的数据量过大问题。单库单表已经不足以支撑庞大的数据量,一个表存储几十亿的数据,不得爆炸,为了解决这问题推出了分库分表的方案。1、拆分维度 1)垂直拆分 2)水平拆分2、主键生成策略 1)UUID 2)COMB 3)雪花算法 4)数据库 ID 表 5)Redis 生成 ID3、分片策略 1)基于业务分片 2)哈希取模分片 3)一致性 Hash 分片4、扩容策略 1)停机扩容 2)平滑扩容5、分库分表引入的问题