面试题答案
一键面试可重复读隔离级别下的数据一致性问题
- 幻读:在可重复读隔离级别下,理论上已解决幻读问题。但在某些特殊情况,如使用
INSERT INTO ... SELECT
等批量插入语句时,可能出现幻读现象。例如,事务A首次查询符合某条件记录数为10条,之后事务B插入一条符合该条件的记录,当事务A使用INSERT INTO ... SELECT
插入符合条件记录时,插入的记录数可能变成11条,与首次查询结果不一致。
优化手段
- 数据库架构优化
- 读写分离:将读操作分发到从库,减轻主库压力,提高并发性能。适用于读多写少的业务场景。优点是架构简单易实现,能显著提升读性能;缺点是数据可能存在短暂延迟,对于数据一致性要求极高的读操作不适用。
- 分库分表:根据业务规则将数据分散到不同数据库或表中。如按用户ID取模分库,按时间范围分表。优点是能有效提升系统扩展性和并发处理能力;缺点是增加了系统复杂度,跨库跨表查询处理难度增大。
- SQL语句优化
- 减少锁范围:使用
SELECT ... FOR UPDATE
语句时,精确控制需要锁定的记录,避免全表锁。例如,通过更精确的WHERE
条件限制锁定范围。优点是能在保证数据一致性前提下,提升并发性能;缺点是对SQL编写要求较高,需准确把握业务逻辑。 - 合理使用索引:创建合适的索引能加速查询,减少锁等待时间。例如,在经常用于查询条件的字段上创建索引。优点是简单有效,对提升性能效果明显;缺点是索引维护有一定成本,过多索引会影响写性能。
- 减少锁范围:使用
- 其他技术手段
- 乐观锁:通过版本号或时间戳机制,在更新数据时检查数据是否被其他事务修改。适用于冲突较少的业务场景。优点是不会阻塞其他事务,并发性能高;缺点是可能出现更新失败需重试的情况。
- 分布式缓存:如使用Redis缓存热点数据,减少数据库读压力。适用于读多写少且数据变化频率低的场景。优点是能大幅提升读性能,降低数据库负载;缺点是存在缓存与数据库数据一致性问题,需通过合适的缓存更新策略解决。