请教一下,长字符串存到数据库中有没有查询性能问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NoKey
V2EX    数据库

请教一下,长字符串存到数据库中有没有查询性能问题

  •  1
     
  •   NoKey 2023-11-23 17:18:18 +08:00 1978 次点击
    这是一个创建于 695 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如字段大概长度是 500 个字符,我们存到数据库
    这个字段设置为索引,同时查询的时候,是等于的方式查(不是 like )
    这样在数据量大起来的时候,有查询新性能问题不?
    请大佬赐教一下
    需不需要额外存一个字段的 md5 值,每次查询 md5 即可,这样字段值会短很多。
    谢谢
    14 条回复    2023-11-28 14:05:08 +08:00
    guochenglong
        1
    guochenglong  
       2023-11-23 17:52:26 +08:00
    这么长的字段,索引得多大啊
    KimAndBella
        2
    KimAndBella  
       2023-11-23 17:59:24 +08:00
    1. 设置索引肯定不行,太大了
    2. 存这个字段的 md5 ,有什么意义?你肯定是 like 的方式查询这个字段,不可能说全内容先 md5 再通过 md5 去查询
    3. 如果这个字段内容是通用的,很多记录都会有相同的内容,那么可以考虑新增一张表,字段 1 存储全内容,字段 2 存储 md4 ,原表存储 md5
    4. 如果 3 不行的话,考虑 es 吧
    5. 考虑业务是否真的需要这样做
    MadDoggy
        3
    MadDoggy  
       2023-11-23 18:16:47 +08:00
    前缀索引了解一下
    Huelse
        4
    Huelse  
       2023-11-23 18:16:52 +08:00
    请把专业的活交给专业的工具,关系性数据库不是干这个的
    ZZ74
        5
    ZZ74  
       2023-11-23 18:50:58 +08:00
    500 个字符的索引 光索引的存储大小就和整张表差不多了。
    我都怀疑关系型数据库是否真的会去走索引。。。。
    确定永远等于查询的话,md5 也可
    NoKey
        6
    NoKey  
    OP
       2023-11-23 18:59:14 +08:00
    @KimAndBella 多谢恢复。有个系统,鉴权的 token ,400 多个字符,我要记录这个 token ,后续要对比,就是全查,我考虑着这么长的字符,计算一个 md5 查起来是不是效率点。脑壳痛~
    crysislinux
        7
    crysislinux  
       2023-11-23 19:24:46 +08:00 via Android
    @NoKey 要不改改设计,加个短的 client id ,如果是用户系统就是 user id ,鉴权去查 client id 对应的 token 存不存在,是否还有效。登录系统也是这样设计的,没听说谁去数据库查加密了的密码的。
    rekulas
        8
    rekulas  
       2023-11-23 19:39:06 +08:00
    如果你是全等查询,那 md5 作为索引是正确的,速度几乎不受多少影响 即使是亿级表也在 1-10 毫秒级
    june4
        9
    june4  
       2023-11-23 22:03:56 +08:00
    我记得在哪本权威 sql 调优书里写过类似场景,就是大字符串比较要加一个索引 hash 列,不用太长(太长占过多内存,比如完整 md5 就过长,如果数据量大的话能省不少内存),md5 前 6-8 个字符足够,因为二个值出来的 hash 相同也没关系。
    然在 sql 里写 where hash = ? and str_value = ?,mysql 会优先通过索引找到 hash 相同的行(一般就 1 个),然后再比较 str_value 值。
    adoal
        10
    adoal  
       2023-11-23 22:17:45 +08:00
    建 hash index
    xuanbg
        11
    xuanbg  
       2023-11-24 08:10:41 +08:00
    存着不影响性能,读的时候不批量读取很多行也没什么性能问题。建索引也不是不能建,就是太长了性能不好。如果超长了就建不了索引了。非要索引的话,建议存 hash 建索引。
    xuanbg
        12
    xuanbg  
       2023-11-24 08:13:50 +08:00
    @NoKey 鉴权的 token 它没有自己的 id 么?我是把 token 存 redis 的,key 就是 Token:id 。这个没必要存数据库啊。
    msaionyc
        13
    msaionyc  
       2023-11-24 11:05:34 +08:00
    直接存查询性能会非常低,当然如果数据量不大的场景其实也没问题。

    MD5 摘要后加索引的方式是可行的,性能会提升非常多
    dode
        14
    dode  
       2023-11-28 14:05:08 +08:00
    把 token 存 redis 呢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2080 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:54 PVG 08:54 LAX 17:54 JFK 20:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86