【 TiDB 使用环境】生产环境
【 TiDB 版本】v4.0.10
【复现路径】
【遇到的问题:问题现象及影响】
SQL执行耗时异常
分区表查询扫描无数据的分区耗时异常
【资源配置】
【附件:截图/日志/监控】
SQL:
SELECT
xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx
FROM
test_table
WHERE
(
aaaa IN (
‘xxx’,‘xxx’,‘xxx’
)
)
AND (
date IN (
‘xxx’,‘xxx’,‘xxx’
)
);
参考下官方文档就可以了
https://docs.pingcap.com/zh/tidb/stable/dashboard-slow-query#tidb-dashboard-慢查询页面
https://docs.pingcap.com/zh/tidb/stable/dashboard-statement-details#慢查询
执行计划中有stats:pseudo关键字说明表的统计信息不准了,重新收集下统计信息吧
没看懂
所以这个建议有啥实际效果嘛?
不太能理解,执行计划准or not。一个空分区为啥会耗时40min
我看执行计划中的索引选择是符合预期的。
想要掌握优化方式呢,就对着慢慢看,一条条的排查就好了
要是有拿不准的,可以继续询问
一个空分区。扫描耗时40min
不是很确定问题所在。希望帮忙分析一下。
分区的裁减到了 5.X 之后才支持的,实际上 6.5 LTS 才成熟
全局分区索引也是类似的,如果你对分区这块有很高的要求,可以考虑升级版本(建议升级前,先做测试)
不明所以。。。
aaaa,date 是联合索引吗?
上面的aaaa字段和date是联合主键。
SELECT
xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx
FROM
test_table
WHERE
(
aaaa =‘xxx’
AND (
date IN (
‘xxx’,‘xxx’,‘xxx’
)
);
这样改写是不是就快了
6.5 版本的支持会好很多,要不要试一下~
所以我是再问SQL改写是么。。。
提点有建设性的建议,谢谢。
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。