为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:v4.0.3
- 【问题描述】:执行一个连表查询,需要30多秒,在mysql只需要0.5秒,麻烦帮忙看下原因。
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
mysql 和 tidb 中各表的数据量有没有较大差异,如果两边数据量基本一致,麻烦提供下关联10张表的 schema 信息,以及 tidb 的 stats 统计信息。
查看 schema 表结构
show create table ... > table_name.sql
导出统计信息
curl -G "http://${tidb-server-ip}:${tidb-server-status-port}/stats/dump/${db_name}/${table_name}" > table_name_stats.json
作为对比,方便的话也请提供下 mysql 的 json 格式执行计划
explain format = json select...
可以尝试加 hint,指定走表关联方式为 Index Join
SELECT /*+ INL_JOIN(d, m, taskd, taskm, o, expend1, expend2, p, l, pl, LEVEL) */ ...
不管用
跟原执行计划比有没有改善,请反馈下加 hint 后 explain 和 explain analyze 结果,如果使用 mysql 客户端,需要在启动客户端时加上 --comments
选项,例如 mysql -h 127.0.0.1 -P 4000 -uroot --comments
还可以查看表的统计信息健康度 show stats_healthy
,对健康度小于 80 的表 analyze table table_name
先收集统计信息,然后 explain analyze 看有没有改善
show stats_healthy,有好几张表是0的,全部analyze table 以后,都到了100,个别的是90的。然后执行explain analyze ,没有改善。explain2.sql (19.5 KB)
确认一下问题,多执行几次,是每次都 30s,还是首次执行时慢?
每次都是大于30秒
@zgcbj
curl http://{TiDBIP}:10080/debug/zip?seconds=20 --output debug.zip
那可能就是这个的问题了,有张表走错了索引
我改下完整的 sql 再发你试下