是否支持暂时让索引失效

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.3
迁移5亿条数据的表,效率太低,2w条/分钟。是否可以通过使索引暂时失效。数据迁移到新表后再使索引生效?

1.先创建索引 插入数据时生成索引 耗时。2.插入数据后 在手动创建索引耗时。 两种情况比较那个比较好?两者比 后创建索引好些。都挺费时。

这个和先删掉索引,后面创建有啥区别。。。反正都要重新生成索引数据。。。

1 个赞

创建索引挺快的。
索引失效一般是用在业务上,不好判断索引是否还在用的业务场景

在大批量操作下,区别重大,使索引失效我只需要记住索引名,把他改一下即可。重键我需要把重键语句原封不动卸载,后面再执行。

ORACLE的经验,大规模插入数据场景下差异还是很大的。

删了再建索引呗,建索引把并发参数调高会快很多

“不可见”是仅仅对优化器而言的,不可见索引仍然可以被修改或删除。
手册上也没说过,不可见的索引,在大量写入数据时,是否会同步索引增加,如果会增加,那楼主说的这种操作方式也没有达到目的啊,有同学测试过这种操作方式没有?

1 个赞

索引失效,插入数据不维护索引,最后重新rebuild索引跟删除索引一样
索引不可见,像上面老哥说的,只是不可见,插入数据还是在同时维护索引

1 个赞

对业务可以暂时失效,但是你这种情况,最好删除后,迁移完后再创建新的索引

使索引暂时失效,只是优化器不使用索引。实际插入数据时索引还是在维护,插入效率没变化。建议先删除索引,插入数据再重建索引挺快的。

2 个赞

删除重建吧,你使用的6.5的版本,重建的时候会慢些

ALTER TABLE t1 ALTER INDEX c1 INVISIBLE;

不可见仅对执行计划不可用吧,索引还是在的,还是删除重建合适

先删除新表索引,数据迁移后再创建

感谢各位了。发现效率低其实不是因为索引导致,估计是没有做batch insert导致的。优化后2-5w做到10秒内,还可以接受。谢谢各位。同时也学习到索引的invisible,这个跟oracle invalid应该有重大区别。oracle invalid的索引可以通过rebuild online重键,还是很舒服的。

1 个赞

5亿数据新建索引应该也不会太快

目标端线别创建索引,数据迁移完毕后再创建索引不就可以了?

学到了,还有invisible这种用法

TIDB有没有索引监控功能,定期找到未使用到的索引,然后删除。