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

2023-01-14 13:00:35 +08:00
 fanyingmao
加索引提高查询效率,难道不能自动加吗? sql 执行都有 sql 语句记录,通过 sql 记录分析出加什么索引提高效率应该挺简单的
1727 次点击
所在节点    问与答
16 条回复
VeryZero
2023-01-14 13:32:24 +08:00
加索引时要锁表的呀,谁敢自动加。

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

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

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

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

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

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


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


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

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

至于“设计时不设计好”,我觉得要在开发阶段数据量小主动发现性能问题比较困难的,就是有发现的意识也增加的工作量。
vitoliu
2023-01-15 12:12:43 +08:00
6,7 年前开始生产环境就不单靠 MySQL 了(B 类除外),你说的自动加索引,实际上就是研发加了一层高效的查询中间件。
fanyingmao
2023-01-15 12:24:43 +08:00
@nothingistrue #13
“需要提前跑掉全部功能”,我想只要跑下所有查询的语句就可以了,只要业务测试出 sql 语句给工具测试就可以了,用不上 ai 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/908880

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX