› 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 · 3990 views
    This topic created in 2277 days ago, the information mentioned may be changed or developed.

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

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

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