面试题答案
一键面试可能遇到的问题
- 哈希冲突:高并发下大量数据写入,可能出现不同数据计算出相同哈希值,导致数据存储在同一哈希桶中,影响查询和写入性能。
- 锁争用:哈希索引在写入时可能会对整个哈希表加锁,高并发写入时多个线程竞争锁资源,降低系统并发性能。
- 范围查询性能差:哈希索引主要适用于等值查询,在范围查询(如 BETWEEN、>、< 等)场景下,无法利用哈希索引优势,需全表扫描,性能较低。
优化策略
- 优化哈希函数
- 原理:设计更合理的哈希函数,减少哈希冲突概率。优秀的哈希函数能让数据在哈希表中更均匀分布。
- 实施步骤:根据业务数据特点选择或自定义哈希函数。例如,对于整数类型数据,可采用除留余数法等简单高效方法;对于字符串类型,可选用更复杂如 FNV 哈希函数等,并在 MySQL 中通过自定义函数实现。
- 锁优化
- 原理:使用细粒度锁代替全局锁,降低锁争用。如采用分区锁,不同分区可并行操作。
- 实施步骤:在 MySQL 中,可根据业务规则对表进行分区(如按日期、ID 范围等),对每个分区单独加锁,减少锁冲突范围,提高并发写入能力。
- 辅助索引结合
- 原理:对于范围查询场景,建立辅助索引(如 B - Tree 索引)。B - Tree 索引按顺序存储数据,适合范围查询,与哈希索引优势互补。
- 实施步骤:在需要进行范围查询的字段上建立 B - Tree 索引。在查询时,MySQL 优化器会根据查询条件选择合适索引,范围查询走 B - Tree 索引,等值查询走哈希索引,提升整体查询性能。