具有不同子查询的聚合查询会杀死每个连接

时间:2019-06-15 19:09:08

标签: mysql

此查询(来自任何客户端,cli,workbench,dbeaver,php库)完全杀死了mysql 8.0.16中服务器上的每个连接,并在8.0.15上按预期运行。

SELECT SUM( `x` )
FROM (
  SELECT DISTINCT
    `T`.`x`
  FROM
    JSON_TABLE(
      '[1]',
      '$[*]' COLUMNS(
        `x` INT PATH "$"
       )
     ) T
  ) y;

使用临时表代替子查询按预期工作(不会使每个mysql连接崩溃)

有人遇到这个问题吗?

编辑:对不起,没有弄清楚这一点,与SUM方法无关,似乎任何带有不同子查询的聚合函数(GROUP_CONCAT,JSON_ARRARYAGG ...)都会使8.0.16上的每个连接崩溃

1 个答案:

答案 0 :(得分:2)

问题似乎出在DISTINCT(很可能是一个错误):

SELECT SUM( `x` )
FROM (
  SELECT DISTINCT `T`.`x` FROM
   JSON_TABLE('[1]','$[*]' COLUMNS(`x` INT PATH "$")) T
) y;
-- error

SELECT SUM( DISTINCT `x` )
FROM (
  SELECT  `T`.`x` FROM
   JSON_TABLE('[1]','$[*]' COLUMNS(`x` INT PATH "$")) T
) y;
-- correct

db<>fiddle demo

编辑:

WITH cte AS (
  SELECT  `T`.`x` FROM
   JSON_TABLE('[1]','$[*]' COLUMNS(`x` INT PATH "$")) T
), cte2 AS (
  SELECT  /*+ NO_MERGE(cte) */  * FROM cte
)
SELECT JSON_ARRAYAGG(`x`)
FROM cte2

即使不使用DISTINCT,问题似乎也与实现有关。