TDB 子查询 比在MySQL 上慢很多

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述
MySQL表导入TIDB,TIDB查询结果比mysql慢很多
【背景】 做过哪些操作
调试过tidb_distsql_scan_concurrency,tidb_executor_concurrency,tidb_index_join_batch_size 等参数,都无效果
【现象】 业务和数据库现象

【问题】 当前遇到的问题
sql 执行时间比mysql上执行时间慢很多
【业务影响】

【TiDB 版本】
6.1
【应用软件及版本】

【附件】 相关日志及配置信息

sql语句 :
SELECT t.blockcode, t.blockname, t.blocktype, MIN(t.tradday) tradday, t.cnt, t.stocks
FROM (
SELECT a.* FROM block_stocks_info a WHERE 2 >= (
SELECT COUNT(*)
FROM block_stocks_info b
WHERE a.blockcode = b.blockcode AND a.tradday <= b.tradday
) ORDER BY a.blockcode, a.tradday
) t GROUP BY blockcode;

MySQL 上执行 时间 14S
tidb上执行 时间 30S



1、actrows和estrows评估差异很大,先手动收集下表的统计信息 然后看看。
2、 上传个展示比较全的执行计划,看看tikv_task相关统计新是否有较多的历史版本读
3、这个SQL看着很别扭,count后还要order by , 建议重新改写下

image


新建 文本文档 (3).txt (13.8 KB)

  1. 试试打开这个参数。

  2. 看看能不能把子查询改写成 inner join。

有效,从30S降到到7S
还有降低时间的余地嘛?

:+1:摸索中 ,我们直接打开了哈

image
调整后
返回时间进一步加快
7S 降到 3S

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。