为什么GROUP_CONCAT+DISTINCT会在某些服务器上触发内存不足(需要8388580字节)


Why does GROUP_CONCAT + DISTINCT triggers a Out of memory (Needed 8388580 bytes) on some servers?

我有一个实时服务器,它似乎不喜欢GROUP_CONCAT+DISTINCT组合。

这是一个测试查询

SELECT
GROUP_CONCAT(DISTINCT id SEPARATOR ',') AS ids
FROM site_content
WHERE  type = 'document'

同样的查询在我的localhost(AMPPS)上似乎很好,但在运行php5.2/5.3的实时服务器上却不好,软件版本为:5.1.40-community-log-MySQLCommunity-Server(GPL)

这个mysql版本是否不支持DISTINCT,或者是否有其他问题?

如果我删除DISTINCT,一切似乎都很好,但在某些情况下,逗号分隔列表中的值可能是重复的。我可以使用DISTINCT删除重复项,也可以稍后使用php的array_unique,这并不理想。

谢谢

更新

我创建了一个包含4个条目的测试表

CREATE TABLE IF NOT EXISTS `a_table` (
  `anId` int(11) NOT NULL,
  `anotherId` int(11) NOT NULL,
  PRIMARY KEY (`anId`,`anotherId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表中的DATA为1:21:31:42:1

我在phpMyAdmin中运行的查询(但代码中也发生了同样的事情)

SELECT
GROUP_CONCAT(DISTINCT anotherId SEPARATOR ',') AS ids
FROM a_table
WHERE  anId = 1

错误为

5-内存不足(需要8388580字节)

mysqld需要重新启动。可能是因为查询不正确而导致某些东西卡住了。

感谢