V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fanyingmao
V2EX  ›  问与答

有没有自动加索引的工具?

  •  
  •   fanyingmao · 66 天前 · 1002 次点击
    这是一个创建于 66 天前的主题,其中的信息可能已经有所发展或是发生改变。
    加索引提高查询效率,难道不能自动加吗? sql 执行都有 sql 语句记录,通过 sql 记录分析出加什么索引提高效率应该挺简单的
    16 条回复    2023-01-15 12:24:43 +08:00
    VeryZero
        1
    VeryZero  
       66 天前
    加索引时要锁表的呀,谁敢自动加。

    生产环境连手动加都很谨慎,别说自动了
    makelove
        2
    makelove  
       66 天前
    这东西靠 AI 来加的话也太不可控了,毕竟索引副作用挺大的要根据业务权衡
    opengps
        3
    opengps  
       66 天前
    只有一个地方有,就是你建表不加索引时候会给你自动加一个默认的。别的场景,都是无法“智能化自动完成”,记录分支只代表过去,最近使用的查询相关逻辑,在内存里的已经做了一层缓存了
    wolfie
        4
    wolfie  
       66 天前
    光 SQL 执行记录咋分析啊。

    比如 租户字段.
    hhjswf
        5
    hhjswf  
       66 天前 via Android
    索引要牺牲插入删除的性能,原则是尽可能少,自动加引擎没那么聪明
    fanyingmao
        6
    fanyingmao  
    OP
       66 天前
    @VeryZero #1
    我指的不是在生产环境自动加,先在测试环境用 sql 找到可以优化的索引,生成加索引语句。在停服维护时,再加索引,这样开发只要关心业务,不要关心索引。
    fanyingmao
        7
    fanyingmao  
    OP
       66 天前
    @makelove #2
    @hhjswf #5
    加索引大部分上是利大于弊,可以极大提高查询速度,才略微降低插入速度,就算加错感觉影响也不大。
    自动加引擎我觉可能比人聪明,自动加就算用最简单的穷举,也比人加的好,大部分开发估计都是加单索引的或会忘记加索引,自动加可以先从最高性能复合索引试起,试错找到最佳的索引方案,而且保证不会遗漏。
    MeteorCat
        8
    MeteorCat  
       66 天前 via Android
    我只知道 optimize ,让表自动排查表性能和优化方案,自动加索引还没见过

    https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html
    512357301
        9
    512357301  
       66 天前 via Android
    用列式存储吧,全表自动索引
    IvanLi127
        10
    IvanLi127  
       66 天前
    设计时不设计好,事后加还不愿意,还想要自动的。。。有点过分啊

    既然想自动加,那为啥不直接一开始就全部加上?
    em70
        11
    em70  
       66 天前
    既然这么简单,你做一个输入 SQL,自动产生索引建议的工具不就行了,看有没有人愿意付费
    icy37785
        12
    icy37785  
       66 天前 via iPhone
    既然觉得索引就算加错了,也不怎么影响性能,那其实可以把索引全加上。
    nothingistrue
        13
    nothingistrue  
       65 天前
    @fanyingmao #6 先暂停讨论索引跟业务的关系,来比较一下常规加索引和你想要的加索引方法的区别。

    常规加索引方式步骤:推测可能有的 SQL ,加索引。该方式:
    只需启动数据库;
    实际效果可控;
    可以根据实际结果实时调整索引;
    SQL 太垃圾导致加索引都不行的时候直接回头调整 SQL 即可。

    AI 自动加索引方式步骤:启动应用服务,全部功能跑一遍,AI 引擎扫描 SQL 执行记录,加索引。该方式:
    需要启动所有服务;
    需要提前跑掉全部功能;实际效果取决于 AI 引擎的智商但至少目前还没有智商超过人类的 AI ;
    SQL 太垃圾导致加索引都不行的时候,除了要回头调整 SQL 外所有步骤都要重新做一遍。


    然后接着讨论索引跟业务的关系,一句话:数据库的所有物理模型,经逻辑模型、概要模型决定链之后,最终是由业务决定的。


    别找 AI 加索引了,花钱雇个人给你加索引,更具备可行性。
    fanyingmao
        14
    fanyingmao  
    OP
       65 天前
    @IvanLi127 #10

    @icy37785 #12
    虽然我觉得全加影响也不大,但是肯定希望能在契合业务下用最好性能索引。

    至于“设计时不设计好”,我觉得要在开发阶段数据量小主动发现性能问题比较困难的,就是有发现的意识也增加的工作量。
    vitoliu
        15
    vitoliu  
       65 天前 via iPhone
    6,7 年前开始生产环境就不单靠 MySQL 了(B 类除外),你说的自动加索引,实际上就是研发加了一层高效的查询中间件。
    fanyingmao
        16
    fanyingmao  
    OP
       65 天前
    @nothingistrue #13
    “需要提前跑掉全部功能”,我想只要跑下所有查询的语句就可以了,只要业务测试出 sql 语句给工具测试就可以了,用不上 ai 。
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1338 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 23:40 · PVG 07:40 · LAX 16:40 · JFK 19:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.