自定义变量取不到值

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】使用变量进行排序,取不到变量的值。这里是有参数或者变量控制么?

【背景】无

【现象】仅在目标集群上能稳定复现,其他同版本集群上未复现。

【业务影响】影响业务进行

【TiDB 版本】5.7.25-TiDB-v4.0.0

【附件】
复现脚本:
CREATE TABLE tmp_test (
c_amount decimal(18,4) DEFAULT NULL,
c_name varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

insert into tmp_test
value (0,‘9’),(1,‘8’),(2,‘7’),(3,‘6’),(4,‘5’),(5,‘4’),(6,‘3’),(7,‘2’),(8,‘1’),(9,‘0’);

SET @amount = 0;
SELECT * FROM (
SELECT c_amount,(@amount:=@amount+1),@amount c_amount_sort FROM tmp_test
order by c_amount
) t;

问题集群上的执行结果:

其他集群上的执行结果:

1.我这边在 v4.0.0 中没有复现出这个问题,在你的环境中查询有值和无值的 SQL 执行计划有区别吗?另外看下稳定复现的集群和其他集群在配置上有何不同;
2.用户变量这个功能一直不太稳定,尤其在 v4.0 早期版本,不太建议在生产环境中使用。

1赞

1、执行计划是相同的。我这边也是,只有这一个集群复现。并且前段时间是正常可用的,最近不清楚做了什么调整,所以发出来讨论一下,看看是不是有什么参数控制。
2、收到,准备逐步替换为开窗函数排序