面试题答案
一键面试1. MySQL哈希索引基本原理
哈希索引基于哈希表实现。当向哈希索引中插入数据时,MySQL会对索引列的值计算哈希码,将哈希码作为哈希表的索引,指向存储实际数据行的位置。比如,对于索引列的值 value
,通过哈希函数 hash_function(value)
得到哈希码 hash_code
,在哈希表中以 hash_code
找到对应的数据指针,进而获取数据。
2. 适合使用哈希索引的场景
- 等值查询:在进行简单的等值查询时,哈希索引性能表现优异。例如,在用户表
users
中有user_id
列,并基于user_id
建立哈希索引,执行查询SELECT * FROM users WHERE user_id = 123;
,通过计算user_id
的哈希码能快速定位到对应的数据行,查询速度快。 - 数据量较大且等值查询频繁:对于大型数据库,若应用中频繁进行等值查询操作,哈希索引能显著提升查询效率。比如电商订单表,经常根据
order_id
进行查询订单详情,此时对order_id
建立哈希索引可加快查询。
3. 不适合使用哈希索引的场景
- 范围查询:哈希索引不支持范围查询。例如,执行查询
SELECT * FROM users WHERE user_id BETWEEN 100 AND 200;
,哈希索引无法直接进行范围查找,因为哈希表中的数据存储位置并非有序,无法通过索引直接定位范围数据,只能全表扫描。 - 排序操作:由于哈希表数据无序存储,若对建立哈希索引的列进行排序,如
SELECT * FROM users ORDER BY user_id;
,无法利用哈希索引来实现高效排序,同样需要全表扫描后再进行排序,效率低下。 - 部分查询条件:当查询条件只是部分列时,哈希索引效果不佳。例如,表中有
user_info
列包含多个属性,对整个user_info
建立哈希索引,若查询SELECT * FROM users WHERE user_info LIKE '%keyword%';
,哈希索引无法有效利用,因为哈希计算是基于整个列值,无法支持部分匹配的查询。