Mysql锁知识总结

### MySQL 知识点总结 #### 1.1 MySQL 的三大范式 MySQL 数据库设计中的三大范式是数据库规范化的核心内容。第一范式(1NF)要求字段值必须是原子性的,不可再分;第二范式(2NF)要求非主属性完全依赖于候选键;第三范式(3NF)要求非主属性不传递依赖于候选键[^1]。 #### 1.2 MyISAM 与 InnoDB 区别 MyISAM 和 InnoDB 是 MySQL 中两种常见的存储引擎。MyISAM 不支持事务,但查询速度较快,适合读密集型场景;InnoDB 支持事务、行级和外键约束,更适合写密集型或需要事务支持的场景[^1]。 #### 1.3 聚簇索引和非聚簇索引的区别 聚簇索引的叶子节点存储的是数据本身,而非聚簇索引的叶子节点存储的是指向数据的指针。InnoDB 的主键索引为聚簇索引,而 MyISAM 的所有索引均为非聚簇索引[^1]。 #### 1.4 char 和 varchar 的区别 `CHAR` 类型是固定长度字符串,存储时会填充空格以达到指定长度,适合存储短且长度固定的字符串;`VARCHAR` 类型是可变长度字符串,仅占用实际存储的数据长度加一个字节来记录长度,适合存储长度不固定的字符串。 #### 1.5 Innodb 为什么推荐使用自增 ID? Innodb 的聚簇索引按照主键顺序存储数据,如果主键是自增 ID,则可以避免插入时的数据页分裂问题,从而提高性能[^1]。 #### 1.6 什么是索引? 索引是数据库中一种特殊的数据结构,用于快速定位表中的数据行,减少查询时间。索引通过牺牲一定的存储空间和写入性能,换取更高的查询效率[^1]。 #### 1.7 索引类型 MySQL 支持多种索引类型,包括普通索引、唯一索引、主键索引、全文索引和空间索引等。每种索引适用于不同的场景和需求[^1]。 #### 1.8 索引底层数据结构 MySQL 的 InnoDB 存储引擎中,索引的底层数据结构通常采用 B+ 树。B+ 树的特点是所有数据都存储在叶子节点上,且叶子节点之间有指针相连,便于范围查询[^1]。 #### 1.9 B 树与 B+ 树区别?为何用 B+ 树? B 树的每个节点既可以存储键值也可以存储数据,而 B+ 树的所有数据都存储在叶子节点上,非叶子节点仅存储键值。B+ 树的优点在于支持高效的范围查询,并且由于叶子节点之间的指针相连,可以更快地遍历数据[^1]。 #### 1.10 索引字段是 int 好还是 varchar 好? 从存储空间和查询效率的角度来看,`INT` 类型通常优于 `VARCHAR` 类型。`INT` 占用固定的空间,而 `VARCHAR` 需要额外的空间来记录长度。 #### 1.11 索引设计原则 索引设计应遵循以下原则:选择性高的列优先建立索引;避免对频繁更新的列建立索引;合理使用联合索引并遵守最左前缀原则;避免过度索引导致写入性能下降[^1]。 #### 1.12 索引失效场景 索引可能在以下场景中失效:使用函数或表达式操作索引列;模糊查询中通配符出现在开头;类型转换导致索引无法匹配;联合索引未遵循最左前缀原则等[^1]。 #### 1.13 如何创建索引? 可以通过 `CREATE INDEX` 或 `ALTER TABLE` 语句创建索引。例如: ```sql CREATE INDEX idx_name ON table_name (column_name); ``` 或者: ```sql ALTER TABLE table_name ADD INDEX idx_name (column_name); ``` #### 1.14 非聚簇索引一定会回表查询吗? 非聚簇索引是否需要回表查询取决于查询的字段是否包含在索引中。如果查询的字段都在索引中,则无需回表查询;否则需要通过主键或辅助键回表查询数据[^1]。 #### 1.15 联合索引的建立规则 联合索引是指在一个索引中包含多个列。建立联合索引时应根据查询条件的频率和选择性来决定列的顺序,通常将选择性高的列放在前面[^1]。 #### 1.16 最左匹配原则 最左匹配原则指的是在使用联合索引时,查询条件必须从索引的最左列开始匹配,否则索引可能失效。例如,对于联合索引 `(col1, col2)`,查询条件中必须包含 `col1` 才能利用索引。 #### 1.17 一条 SQL 执行很慢的原因 SQL 执行慢可能由以下原因导致:缺少合适的索引;索引失效;查询条件复杂;存在全表扫描;等待;服务器资源不足等[^1]。 #### 1.18 SQL 优化案例 SQL 优化可以从以下几个方面入手:分析执行计划(EXPLAIN),确保使用了正确的索引;重写 SQL 语句以减少复杂度;分页查询时避免使用 `OFFSET`,改用基于主键的查询;合理拆分大表等[^1]。 #### 1.19 COUNT() `COUNT(*)` 会统计表中所有行数,即使某些列可能为 NULL;`COUNT(1)` 和 `COUNT(*)` 效果相同;`COUNT(column)` 只统计指定列非 NULL 的行数。 #### 1.20 什么是 MySQL 事务事务的四大特性是什么? 事务MySQL 中一组逻辑操作单元,确保这些操作要么全部成功,要么全部失败。事务的四大特性(ACID)包括:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。原子性保证事务不可分割;一致性保证事务前后数据库状态一致;隔离性保证并发事务互不干扰;持久性保证事务提交后结果永久保存[^4]。 #### 1.21 对 MySQL 性能优化的理解 MySQL 性能优化可以从硬件、软件和应用层面入手。硬件层面包括增加内存、使用 SSD 等;软件层面包括调整 MySQL 参数配置、优化索引设计;应用层面包括重写 SQL 语句、分库分表、使用缓存等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀不封

打赏就是对作者的一种赞赏和鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值