首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 32 天前 · 1397 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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