sql查询,每次得到的条数不稳定

您好,这个sql是可以得,查询得到的结果也是固定的,但是我们mysql查询出来的是1406条,这个sql查询出来的是1413条

  1. 之前结果不稳定的问题是因为,tidb 读取数据是并行地从存储层读数据,在没加 order by 的情况下,顺序无法保证,因此 group_concat 的输出结果会不稳定。导致外层使用 group by appid 的时候,得不到稳定的执行结果
  2. 这个问题的另一个方案,是在 group_concat 内部使用 order by,也就是我第一次发的那条 sql。但是看起来触发了 tidb 内部的 bug,我需要查一下
  3. 现在和 mysql 查询结果行数不一样的情况,我不确定是为什么,还需要查一下

您这边方便提供一下2个表的数据给我们吗?这样查起来会最快

麻烦反馈下这个查询的所有数据,辛苦了,多谢。

SELECT
place_id,
appname,
appid
FROM
ex_places_info
WHERE
appid <> ‘’;

表的数据比较大,place表都已经1.8G了
https://file.51tuiyi.com/index.php/s/8v6kFEGRSPMpWUx 这是cach的部分
https://file.51tuiyi.com/index.php/s/s1Snt2x5rB9jFnS place的 密码是 123123

  1. 关于结果不稳定的结论不变,是由于 group_concat 中没有使用 order by 导致的,是预期的。加上 order by 后会报错,是 tidb 内部的一个问题,我们会修一下

  2. 在 group_concat 内加上 order by 有一个 workaround:

set global  @@group_concat_max_len=1000000;
select * from ex_report_place_summary_catch rps left JOIN ( SELECT place_id, GROUP_CONCAT( appname order by appname SEPARATOR '' ) appname, GROUP_CONCAT( appid order by appid SEPARATOR '' ) appid FROM ex_places_info WHERE appid <> '' GROUP BY place_id ) info ON rps.place_id = info.place_id WHERE 1 AND s_date >= '2021-02-01 00:00:00' AND s_date <= '2021-02-01 23:59:59' group by appid;

所以这是一个 bug?有 issue 吗,预计啥时候修复呢。

结果不稳定不是 bug,是预期的,需要通过在 group_concat 内加上 order by 来解决

加上 order by 后,可能会报错 bytes.Buffer: truncation out of range
这个是 bug

为了避开这个 bug,可以通过上面的那个 workaround 解决

老师,请问,这个查询数量改变的问题是否修了呢,我今天升级到tidb5.0,查询的结果还是改变的

同在关注

sql查询,每次得到的条数不稳定 这里回复,查询结果不稳定是预期的,如果希望结果稳定需要加上 order by,目前是升级到 5.0.1 版本加 order by 还是会报错么

好的,多谢,我们加上试试

持续关注~坐等结果~

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