1 引言

mysql数据库中最常见的两种索引即时B-Tree和Hash索引。众所周知,B-Tree的时间复杂度为O(logN), 而Hash算法的时间复杂度为O(1)。那为什么不能使用Hash索引代替B-Tree呢?

2 原因

I hash索引不支持范围搜索如between..and.., < and >,like等

b-tree索引可以用于范围搜索和模糊搜索,但%key%前后模糊搜索也不支持

II hash索引不能用来优化order by语句

III hash索引只能适用于完全匹配

IV 在使用limit语句时,返回的数据集较小时也不会使用索引

V hash索引维护成本较大,添加数据和删除数据

VI 主键一般可用Hash索引,或者那些选择项(first, second),状态项(on, off)可用Hash索引。