SELECT
deptCode,
deptCName,
upperDeptCode
FROM
(SELECT
*
FROM
sc_pubcompany
WHERE upperDeptCode > 0
ORDER BY upperDeptCode,
deptCode) realname_sorted,
(SELECT
@pv := '2000000000') initialisation
WHERE (
FIND_IN_SET(upperDeptCode, @pv) > 0
AND @pv := CONCAT(@pv, ',', deptCode)
)
AND validFlag = '1'
ORDER BY deptCode;
这个执行,每次结果不同:
排查原因:
首先排查数据来源问题:
(SELECT
*
FROM
sc_pubcompany
WHERE upperDeptCode > 0
ORDER BY upperDeptCode,
deptCode) realname_sorted
我把这部分的结果,单独拉出来查询,结果每次结构相同。
当时一下子就排除了数据来源的原因。
卡了很久。
之后,我将这部分数据,单独拉倒了一个临时表:
create table temp like sc_pubcompany;
insert into temp
SELECT
*
FROM
sc_pubcompany
WHERE upperDeptCode > 0
ORDER BY upperDeptCode,
deptCode;
SELECT
deptCode,
deptCName,
upperDeptCode
FROM
temp,
(SELECT
@pv := '2000000000') initialisation
WHERE (
FIND_IN_SET(upperDeptCode, @pv) > 0
AND @pv := CONCAT(@pv, ',', deptCode)
)
AND validFlag = '1'
ORDER BY deptCode;
结果发现:
1、 每次结果稳定了;
2、 数据多了至少三倍;
由此推测: 导致之前数据不稳定的原因,可能是 子查询 占用的是内存,
而后续变量及其迭代也在大量占用内存,导致内存不够用,
结果变少的同时, 结果集也不稳定。