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

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

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

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

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

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

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

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

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


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


    别找 AI 加索引了,花钱雇个人给你加索引,更具备可行性。
    fanyingmao
        14
    fanyingmao  
    OP
       2023-01-15 11:50:48 +08:00
    @IvanLi127 #10

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

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