tidb如何重新组织某个表

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】
【遇到的问题:问题现象及影响】

查询某个表很慢:select * from tab_A limit 10 (80万行)

我想重新组织表,不知道语法是怎样的?

【附件:截图/日志/监控】

ANALYZE TABLE tab_A

explain analyze table tab_A

但是按说没有where条件的limit查询,不应该太慢才对。可以explain analyze select * from tab_A limit 10 拿一下执行计划看看是慢在哪一步

gc时间设置过长也会慢哦,会扫描过多无用的key

没有重新组织表,慢就找慢的原因就好了

这个表show table XXX regions 看看region数量,tidb评估数据量更适合参考regions

ANALYZE TABLE

重新组织按以下步骤:
create 新表 like 旧表;
insert into 新表 select * from 旧表;
drop table 旧表;
rename 新表 to 旧表;

先排查下tikv节点是否都正常

麦迪你说的重新组织表具体是想做什么,你的目的应该是解决慢查询吧。

如果是解决慢查询,可以通过 Dashboard 界面找到这条SQL,然后查看对应的执行计划信息,应该很快就可以定位到原因。

感觉是想重新组织索引?

重新组织表是想重建还是分析表?

你执行 explain analyze select * from tab_A limit 10提出执行计划看下

不加条件过滤查询有啥意义?

1 个赞

1、 建新表,插数据,rename,删旧表
2、 手工compact, 可以使用大佬写的脚本
ops/tidb-compact.py · wencycool/something_for_tidb - Gitee.com

1 个赞

alter table tab_A engine=innodb;

tidb肯定不支持这个

用etl工具将数据抽取到一个新表

重命名一下表名,然后重新抽取一下数据,然后再重命名回去。

1 个赞

重新建个表吧,索引和主键都加的合理一点,再不行就得看看你的某些参数设置的是不是有问题,是不是在全表扫描