mysql 数据去重用DISTINCT还是GROUP BY?
在数据去重时,DISTINCT 和 GROUP BY 都可以实现去重功能,但它们在语义、性能和功能上有重要区别: 1. 基本用法对比 DISTINCT -- 简单去重 SELECT DISTINCT department, job_title FROM employees; -- 与聚合函数结合 SELECT COUNT(DISTINCT depa…
2025-12-28 10:18
|
571 字
|
5 分钟
Redis的LFU淘汰策略如何解决时效性问题?
Redis 的 LFU(Least Frequently Used)淘汰策略通过引入时间衰减机制和概率递增算法,巧妙地平衡了访问频率与访问时效性,有效避免了“频率老化”问题。 下表清晰地展示了解决时效性问题的两个核心机制: 机制名称解决的核心问题实现方式配置参数时间衰减 (Time Decay)过去频繁访问但现在不再活跃的键(频率老化)根据时间间…
2025-12-27 20:31
|
1285 字
|
5 分钟
mysql磁盘io过高如何排查解决?
MySQL磁盘IO过高是一个常见的性能问题,需要进行系统性排查。以下是详细的排查和解决步骤: 一、快速诊断 1. 确认IO问题来源 # 查看系统整体IO情况 iostat -x 1 # 重点关注:%util、await、svctm # 查看进程级IO iotop # 或 pidstat -d 1 # 查看MySQL进程的IO pidstat -d …
2025-12-27 20:28
|
506 字
|
8 分钟
为什么Mysql要用B+树来实现呢,而不是B树?
MySQL 选择 B+ 树而不是 B 树作为索引结构,主要是基于以下几个关键优势: 1. 更低的树高与更高的查询效率 B+ 树的内部节点不存储实际数据,只存放键值和子节点指针,因此每个节点能容纳更多键,从而有效降低树的高度。 树高越低,查询时需要的磁盘 I/O 次数越少,尤其适合磁盘存储系统,其中 I/O 是主要性能瓶颈。 2. 更高效的范围查询 …
2025-12-27 20:20
|
667 字
|
3 分钟
为什么有些公司禁止使用@Transactional声明式事务?
这是一个很好的问题,很多开发者都有类似的疑惑,毕竟@Transactional是Spring框架提供的强大便捷功能。公司层面禁止使用它,通常不是因为这个注解本身是“坏的”,而是出于对复杂性的控制、对代码质量的追求以及避免隐藏风险的考虑。 主要原因可以归结为以下几点: 1. 隐藏的复杂性与不可预测的行为 声明式事务将事务逻辑“隐藏”在AOP代理之后,…
2025-12-27 13:33
|
1629 字
|
7 分钟
为什么MySQL不建议使用NULL作为列默认值?
这是一个很好的数据库设计问题。MySQL不建议使用NULL作为列默认值主要有以下几个原因,涉及性能、查询复杂性和数据完整性: 1. 存储空间问题 NULL值需要额外存储:在InnoDB中,每个可为NULL的列需要一个额外的位(bit)来标记是否为NULL 固定长度列中的NULL:如果是固定长度列(如CHAR),NULL仍然会占用完整长度 虽然现代M…
2025-12-27 13:31
|
616 字
|
4 分钟
Mybatis是如何进行分页的?
MyBatis的分页实现主要有以下几种方式: 1. 逻辑分页(RowBounds) 在MyBatis核心包中提供,但存在性能问题: // 使用RowBounds进行内存分页 List<User> users = sqlSession.selectList( "com.example.mapper.UserMapper.selectUse…
2025-12-27 13:29
|
487 字
|
6 分钟
java 如何在20秒内完成两个库各100万数据比对操作?
以下是针对20秒内完成200万数据比对的几种优化方案: 1. 基础方案 - 批量查询 + 哈希优化 // 使用分页批量查询 + HashSet public void compareData() { int pageSize = 50000; // 每次处理5万条 // 从DB1批量读取 Map<Integer, String> db1…
2025-12-27 13:27
|
489 字
|
11 分钟
MySQL 中的索引数量是否越多越好?为什么?
MySQL 中的索引数量不是越多越好,索引虽然能提升查询性能,但也会带来明显的副作用。需要根据实际业务场景在查询性能和数据维护成本之间进行权衡。 一、索引的优点 加速数据检索 索引(特别是 B+Tree 索引)可大幅减少 WHERE、JOIN、ORDER BY、GROUP BY 的扫描数据量。 保证数据唯一性 唯一索引可避免数据重复。 优化排序…
2025-12-27 12:55
|
873 字
|
4 分钟
MySQL 的索引下推是什么?
MySQL 索引下推(Index Condition Pushdown,ICP) 索引下推是 MySQL 5.6 引入的一项查询优化技术,它允许在存储引擎层执行部分 WHERE 条件的过滤,而不是将所有数据行返回到 Server 层后再进行过滤。 核心原理 在传统的查询处理中: 存储引擎使用索引定位数据 将完整的数据行返回给 Server 层 Se…
2025-12-27 12:54
|
742 字
|
5 分钟