mysql 字段频繁修改怎么优化 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
isxzlhhh
V2EX    数据库

mysql 字段频繁修改怎么优化

  •  
  •   isxzlhhh 2024-05-22 16:31:32 +08:00 2643 次点击
    这是一个创建于 573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    mysql 有张表用的引擎是 MyisAM,这张表有几个字段是被频繁修改的,导致查询和操作都特别慢,请问各位大佬们有什么办法优化嘛

    21 条回复    2024-05-22 22:26:47 +08:00
    j1132888093
        1
    j1132888093  
       2024-05-22 16:36:10 +08:00
    数据量,表结构,索引
    edward1987
        2
    edward1987  
       2024-05-22 16:42:09 +08:00
    如果有索引,那查询应该不慢,如果没索引 那写入应该不慢。是怎么做到两个操作都慢的,索引加了但是查询的时候用不到??
    leegradyllljjjj
        3
    leegradyllljjjj  
       2024-05-22 16:45:18 +08:00
    不要问 问就是索引
    isxzlhhh
        4
    isxzlhhh  
    OP
       2024-05-22 16:50:22 +08:00
    @edward1987 引擎是 myisam 每修改一条记录都会产生表锁
    isxzlhhh
        5
    isxzlhhh  
    OP
       2024-05-22 16:51:45 +08:00
    就是修改太频繁了 就是每 2 分钟 表里面的两三万条数据 每条数据都要修改一次
    tigerstudent
        6
    tigerstudent  
       2024-05-22 16:55:44 +08:00
    多条数据如果没有关联的话,可以考虑分库分表?
    nickxudotme
        7
    nickxudotme  
       2024-05-22 17:00:20 +08:00
    @isxzlhhh #5 有点哈人,这种场景要不要考虑其他方案存储
    kenvix
        8
    kenvix  
       2024-05-22 17:03:58 +08:00
    MyISAM 就不适合频繁改的表,他是用来多读少改的,能不能换 Inno?
    cxsz
        9
    cxsz  
       2024-05-22 17:05:24 +08:00
    @isxzlhhh #5 一共两三万条数据的话,考虑下放内存修改,然后定时落库
    celaraze
        10
    celaraze  
       2024-05-22 17:07:33 +08:00
    1 ,MyISAM 引擎。
    2 ,频繁且大量写入,2 分钟全表更新一次。

    不知道你的后端应用什么技术栈,我给一些可能的建议:
    [应用] 避免单数据更新,尽量使用 `on duplicate key update` 语句。
    [应用] 避免阻塞主线程,入队列写入,前端可给 toast 告知用户数据正在更新。
    [DB] 索引,毋庸置疑,那列字段经常被查询、更新就加。
    [DB] 查询时要尽量命中索引,少用 `!=` `or` `like` 啥的。
    [DB] 分区表,100 / 1000 / 10000 条数据一个分区这样。

    有个办法是你应用查询的过程,手动执行下,用 `explain` 检查下是不是这个查询经历了全表扫描过程,是的话就优化索引。
    celaraze
        11
    celaraze  
       2024-05-22 17:08:49 +08:00
    @celaraze 总的来说,还是从数据库调优角度出发,分别从写入和查询去做优化,如果实在不行,按业务需求我蛮建议你非阻塞。
    yjhatfdu2
        12
    yjhatfdu2  
       2024-05-22 17:12:21 +08:00
    为啥不用 innodb 呢? innodb 应该是 mvcc ,读写可以不冲突
    isxzlhhh
        13
    isxzlhhh  
    OP
       2024-05-22 17:15:54 +08:00
    @yjhatfdu2
    @kenvix 用 innodb 第一个是他们之前代码可能写的有问题,换成 innodb 线上很容易产生死锁问题,因为有很多定时器都在更新这张表的数据
    第二 innodb 更新数据其实还会更慢点 因为有事务粒度大小的问题
    isxzlhhh
        14
    isxzlhhh  
    OP
       2024-05-22 17:17:34 +08:00
    @celaraze 后端采用的是 java 写的 业务有个很奇葩的要求 两分钟这些字段都要更新完 而且还不能影响整个系统
    isxzlhhh
        15
    isxzlhhh  
    OP
       2024-05-22 17:20:06 +08:00
    @cxsz 我也在考虑在 redis 里面进行修改 但是在纠结用哪种数据结构 大概有五六个字段要频繁修改 而且我感觉会有并发问题出来 因为系统里面是有多个定时器 而这些定时器又用了多线程去修改 有几率是会出现好几个线程去同时修改同一条数据的问题
    isxzlhhh
        16
    isxzlhhh  
    OP
       2024-05-22 17:21:52 +08:00
    我的第一步想法是先换一个阿里云的读写分离的数据库 因为现在项目用的数据库是在服务器上手动装的 而且这台服务器还跑了 java 应用 redis 一台 4 核 8g 的服务器,不知道换了数据库会不会稍微好点
    yjhatfdu2
        17
    yjhatfdu2  
       2024-05-22 17:21:57 +08:00
    两张表,写完就切另一张表吧
    lasuar
        18
    lasuar  
       2024-05-22 17:49:30 +08:00
    你换 redis 也要改旧代码,不如换 innodb ,解决根本问题。死锁,发现一个解决一个就是了,能有多少死锁?
    encro
        19
    encro  
       2024-05-22 17:56:26 +08:00
    换 innodb+mysql8 。行级锁,万一记录多了 instant 可以让你增加字段时不至于影响业务。
    频繁改动,可以考虑 duckdb,redis 之类的内存操作 db 。
    coala
        20
    coala  
       2024-05-22 18:16:12 +08:00
    多改动的需求, 又需要索引 这不就是 innodb 解决的问题吗? 主键索引 不就是牺牲一点查询性能 解决了 改动慢的问题, 为啥不试试看, 成本最低的改造方案。
    liuhan907
        21
    liuhan907  
       2024-05-22 22:26:47 +08:00
    其实我在想,10w/2min 这个频率算下来不是很高,甚至可以说是低的。为什么会有性能问题?
    @isxzlhhh
    关于   nbsp; 帮助文档     自助推广系统     博客     API     FAQ     Solana     971 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:12 PVG 03:12 LAX 11:12 JFK 14:12
    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