› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
brader
V2EX  ›  MySQL

mysql 哈希索引

  •  2
     
  •   brader · Jul 3, 2020 · 4126 views
    This topic created in 2318 days ago, the information mentioned may be changed or developed.

    你们在实际工作中,哈希索引用的多吗? 这么多年来,我在实际项目中,哈希索引一次都没用过,不知道是自己对哈希索引的认知度不高,还是使用场景本来就少。

    我能想到的使用场景,就是类似 url 这样的字段,都是等值查询的,但是我做过的项目中,很少以 url 字段作为 where 条件的,所以也就不会给这样的字段建立索引。 还有一部分,虽然有等值查询的场景,但是偶尔有业务会用到模糊匹配,所以也放弃了哈希索引,改用普通索引。

    16 replies  •  2020-07-03 15:22:16 +08:00
    marquina
    marquina
    Jul 3, 2020 via Android
    1
    InnoDB 有自适应哈希索引啊
    brader
    brader
    OP
    Jul 3, 2020
    2
    @marquina 是有自适应哈希,但是和你单独建的哈希索引,用起来肯定是有区别的,如果完全没区别,mysql 也就没必要保留这个索引类型了。
    gz911122
    gz911122
    Jul 3, 2020
    3
    @brader 为什么肯定有区别啊?
    brader
    brader
    OP
    Jul 3, 2020
    4
    @gz911122 自适应的,例如:某些情况不会建,获取有时候建了,查询的时候不一定会用
    zc1249274251
    zc1249274251
    Jul 3, 2020
    5
    现在 mysql 引擎基本都是 InnoDB,所以接触 hash 索引就很少了 平常使用 mysql 基本就是关系 ACID 也确实用不到 hash 索引一般是用在搜索上这块儿 如果有做搜索引擎的老哥 估计了解得多
    brader
    brader
    OP
    Jul 3, 2020
    6
    @zc1249274251 做搜索引擎业务的,也很少用 mysql 数据库吧,可能是用 ES 之类的?
    souco
    souco
    Jul 3, 2020
    7
    我记得 innoDB 只是支持自适应 hash 索引,创建索引的话只支持 btree ?
    csl1995
    csl1995
    Jul 3, 2020
    8
    基本不会用到的,正常业务都会有范围查询的,哈希只能做等值,所以基本都是用默认的 B+Tree
    chihiro2014
    chihiro2014
    Jul 3, 2020
    9
    不能说没有用吧,只是 hash 索引用的范围较小,只适合精准查询(比如用=这种),不适合范围查询。如果只是确定的东西,使用 hash 索引是最快的,不然要么就循序扫描。MySQL 的话默认 B+Tree 。一般 hash 索引如果 gg,那就会退化为循序扫描了,说的不一定对,看看就好
    hangszhang
    hangszhang
    Jul 3, 2020
    10
    自己创建不了 hash 索引吧,只能 InnoDB 自己去创建
    Kakajing
    Kakajing
    Jul 3, 2020
    11
    @hangszhang 可以创建,为啥不可以???
    slipper
    slipper
    Jul 3, 2020
    12
    因为 B+树的树高很低+顺序读盘,像你这种需求用前缀索引,哪怕几百万条,查询的时间消耗同哈希索引多消耗的时间消耗是微秒甚至 ns 级别,因为无论哪个索引都要读盘,差距的只是传送时间。而网络消耗都是毫秒以上,这样一比较,哈希索引几乎没有时间上的优势了。如果你业务上真的有用哈希比用 B+有明显时间差的话,建议还是不用 innoDB 了。
    joApioVVx4M4X6Rf
    joApioVVx4M4X6Rf
    Jul 3, 2020
    13
    如果你只有一个 mysql,但是还想有缓存的效果,哈希索引就有用了。有钱当然可以上 redis,没钱,哈希索引也还好
    love
    love
    Jul 3, 2020
    14
    @Kakajing 我记得似乎只有内存表有 hash 索引啊?谁用 mysql 内存表啊?
    brader
    brader
    OP
    Jul 3, 2020
    15
    @love 嗯,mysql 只有 MEMORY 引擎显式地支持 hash 索引,不能说没人用吧,有些业务可能会用到
    npe
    npe
    Jul 3, 2020
    16
    InnoDB 在 8.0 移除了 Hash 索引。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1192 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 00:26 · PVG 08:26 · LAX 16:26 · JFK 19:26
    ♥ Do have faith in what you're doing.