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