你们在实际工作中,哈希索引用的多吗? 这么多年来,我在实际项目中,哈希索引一次都没用过,不知道是自己对哈希索引的认知度不高,还是使用场景本来就少。
我能想到的使用场景,就是类似 url 这样的字段,都是等值查询的,但是我做过的项目中,很少以 url 字段作为 where 条件的,所以也就不会给这样的字段建立索引。 还有一部分,虽然有等值查询的场景,但是偶尔有业务会用到模糊匹配,所以也放弃了哈希索引,改用普通索引。
1
marquina 2020-07-03 09:23:52 +08:00 via Android
InnoDB 有自适应哈希索引啊
|
2
brader OP @marquina 是有自适应哈希,但是和你单独建的哈希索引,用起来肯定是有区别的,如果完全没区别,mysql 也就没必要保留这个索引类型了。
|
5
zc1249274251 2020-07-03 10:22:03 +08:00
现在 mysql 引擎基本都是 InnoDB,所以接触 hash 索引就很少了 平常使用 mysql 基本就是关系 ACID 也确实用不到 hash 索引一般是用在搜索上这块儿 如果有做搜索引擎的老哥 估计了解得多
|
6
brader OP @zc1249274251 做搜索引擎业务的,也很少用 mysql 数据库吧,可能是用 ES 之类的?
|
7
souco 2020-07-03 10:43:27 +08:00
我记得 innoDB 只是支持自适应 hash 索引,创建索引的话只支持 btree ?
|
8
csl1995 2020-07-03 11:10:41 +08:00
基本不会用到的,正常业务都会有范围查询的,哈希只能做等值,所以基本都是用默认的 B+Tree
|
9
chihiro2014 2020-07-03 11:11:38 +08:00
不能说没有用吧,只是 hash 索引用的范围较小,只适合精准查询(比如用=这种),不适合范围查询。如果只是确定的东西,使用 hash 索引是最快的,不然要么就循序扫描。MySQL 的话默认 B+Tree 。一般 hash 索引如果 gg,那就会退化为循序扫描了,说的不一定对,看看就好
|
10
hangszhang 2020-07-03 11:36:22 +08:00
自己创建不了 hash 索引吧,只能 InnoDB 自己去创建
|
11
Kakajing 2020-07-03 11:40:51 +08:00
@hangszhang 可以创建,为啥不可以???
|
12
slipper 2020-07-03 11:46:25 +08:00
因为 B+树的树高很低+顺序读盘,像你这种需求用前缀索引,哪怕几百万条,查询的时间消耗同哈希索引多消耗的时间消耗是微秒甚至 ns 级别,因为无论哪个索引都要读盘,差距的只是传送时间。而网络消耗都是毫秒以上,这样一比较,哈希索引几乎没有时间上的优势了。如果你业务上真的有用哈希比用 B+有明显时间差的话,建议还是不用 innoDB 了。
|
13
joApioVVx4M4X6Rf 2020-07-03 11:54:23 +08:00
如果你只有一个 mysql,但是还想有缓存的效果,哈希索引就有用了。有钱当然可以上 redis,没钱,哈希索引也还好
|
16
npe 2020-07-03 15:22:16 +08:00
InnoDB 在 8.0 移除了 Hash 索引。
|