11k10 分钟

2025-01-15🌱上海: ☀️ 🌡️+6°C 🌬️↓18km/h # Redis中常见的数据类型有哪些? # 总结分析 String(字符串) 特点:最基本数据类型,能存储文本、数字、二进制数据,最大长度 512MB。 使用场景:缓存临时数据(如用户会话、页面缓存),作为计数器统计访问量、点赞数等。 Hash(哈希) 特点:键值对集合,适合存对象属性,内部用哈希表实现,适合小规模数据。 使用场景:存储商品详情的各个属性以便快速检索。 List(列表) 特点:有序字符串集合,支持两端推入和弹出,底层是双向链表。 使用场景:消息队列(通过 LPUSH
6.3k6 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # MySQL中如何解决深度分页的问题? # 总结分析 # 什么是深分页? 定义:深度分页问题是在数据库查询中,访问分页查询结果集后面部分(深层页码)时出现的性能问题。 示例:以数百万条记录的表分页展示为例,当用户请求第 10000 页(pageSize 为 10)数据时,SQL 语句为 LIMIT 99990, 10,数据库需先扫描前 99990 条记录,导致性能显著下降。 起始 ID 计算:起始 ID = (页数 - 1) * 每页项目数 + 1 ,并以不同页数为例说明,如第 10000
9.9k9 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # MySQL中有哪些锁类型? # 简要回答 在MySQL中,主要有以下几中锁类型: 行级锁:对特定行加锁,适合高并发,允许并发访问不同行。 表级锁:对整个表加锁,用于需保证完整性的小型表,加锁时其他事务无法读写。 意向锁:表锁,分意向共享锁(IS)和意向排它锁(IX),用于行级锁与表级锁结合。 共享锁:允许多个事务并发读,不允许修改,释放后其他事务才能获排它锁。 排它锁:只允许一个事务读写,其他事务需等待排它锁释放。 元数据锁(MDL):保护数据库对象元数据,防止 DDL 操作时被修改。 间隙锁:针对
8.9k8 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # MySQL中的事务隔离级别有哪些? # 事务的隔离级别 读未提交(READ UNCOMMITTED) 是最低的隔离级别,在这种隔离级别下,一个事务可以读到另一个事务未提交的数据。这种隔离级别下会存在幻读、不可重复读和脏读的问题。 读已提交 (READ COMMITTED) 在一个事务修改数据过程中,如果事务还没提交,其它事务不能读该数据。所以,这种隔离级别是可以避免脏读的发生的,但是可能会引发不可重复读问题,即在同一个事务中,相同的查询可能返回不同的结果。 可重复读 (REPEATABLE READ
6.9k6 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # MySQL是如何实现事务的? # 简要回答 主要是通过锁、Redo log、Undo Log 、MVCC来实现事务 通过事务的特性来分析 原子性: undo log(回滚日志),它会记录事务的反向操作,也就是保存数据的历史版本,用于事务的回滚,可以在事务执行失败之后恢复之前的数据,实现原子性和隔离性 一致性:通过原子性、隔离性、持久性来达到一致性的目的 隔离性: Mysql利用锁机制,通过对数据并发修改的控制,满足事务的隔离性。 MVCC(多版本并发控制),满足了非锁定读的需求,提
1.8k2 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # 请详细描述MySQL的B+树中查询数据的全过程 # MySQL中count(*)、count(1)和count(字段名)有什么区别? # 简要回答 都是用来统计行数的聚合函数,但是还有一些区别: 功能上: 1. count(*)会统计表中所有行的数量,包括null值(不会忽略任何一行的数据)。由于只是计算行数,不需要对具体的列进行计算,所以性能一般较高 2. count(1)和count(*)几乎没有差别,也会统计表中包括null值的所有行的数量 3. count(字段名)只统计指定
9.8k9 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # MySQL中的索引数量是否越多越好?为什么? # 简要回答 索引数量并不是越多越好,虽然索引在提升查询性能方面起着重要作用,但是过多的索引会带来一些负面影响。 占用额外的存储空间 每个索引都会占用一定的磁盘空间,当索引数量过多的时候,会导致数据库文件体积增大,不仅浪费磁盘空间,还可能影响数据库的备份和恢复速度,每个索引都是一个B+树,B+树的每个节点通常是一个页,每页默认16KB 降低写入性能 每次对表进行插入、更新、删除操作时,数据库不仅要更新表中的数据,同时还要更新相关的索引,所以索引数量
3.1k3 分钟

2025-01-15🌱上海: ☀️ 🌡️+4°C 🌬️↓19km/h # MySQL中使用索引一定有效么? # 简要回答 不一定有效 查询条件中不包含索引列 低基数列索引效果不佳 查询条件复杂且不匹配索引的顺序 对于小表,全表扫描可能比使用索引开销更小 # 补充回答 排查索引效果的方法:使用EXPLAIN命令,在查询语句前添加EXPLAIN可以查看MySQL选择的执行计划,了解是否使用了索引,使用了哪个索引,以及扫描的行数等信 红色为需要重要关注的信息 id:执行计划中每个操作的唯一标识符。对于一条查询语句,每个操作都有一个唯一的id。但是在多表join的时候,一次e
4.8k4 分钟

# MySQL三层B+树能存多少数据? 具体答案题解很详细,这里只补充下思路及扩展知识点。 # 答题思路 一般这种题,更多的是考察对于MySQL存储格式的了解,后续遇到类似的面试题该如何思考?接下来按步骤分析以下。 了解MySQL的存储格式及对应的结构(如每页默认大小16KB,B+树的结构) 假设数据大小,估算每页可存储数据数量 假设索引键和指针大小,估算单个节点的扇出数量 通过(单页存储数据量×单个节点的扇出量2 )计算总数据量,这里三层就是2次方,n层就是n-1次方。 # 扩展知识(了解即可) # InnoDB的存储格式 # 页结构 # 引导思路及假想面试 Q :上面问题回答的不错
6k5 分钟

2025-01-15🌱上海: ☀️ 🌡️+3°C 🌬️↓19km/h # MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么区别? # 简要回答(重要) 聚簇索引的非叶子节点存储的是索引值,叶子节点存储的是完整的数据记录,一个表只能有一个聚簇索引,一般是表的主键,主要用于范围查询和排序。 非聚簇索引的非叶子节点存储的也是索引值,但是叶子节点存储的是数据行的主键或对应的索引列,一个表可以有多个非聚簇索引,非聚簇索引由称为辅助索引,二级索引等,主要用于快速定位要查找的列。 # 补充回答(引导面试官主动提问) 聚簇索引简单理解就是把索引和数据记录放在一起了,通过索引就可以