MySQL "GROUP BY" 忽略记录顺序
MySQL "GROUP BY" ignores record order
我们刚刚将数据库从 MySQL 5.0 服务器迁移到 5.5 服务器,像这样的简单查询似乎不再按预期工作:
SELECT * FROM (
SELECT *
FROM tblTable
ORDER BY fldField ASC
) tmp
GROUP BY fldField
内部查询仍然是 returns 正确排序的记录集,但分组依据不再选择该集的第一条记录。
将顺序切换为 DESC 也没有影响,因此推测分组依据尚未切换为选择最后一条记录。
据我所知,group by实际上只是按照它们创建的顺序选择第一条记录,而不是实际记录集的顺序。如果这有意义?
我似乎找不到任何错误报告或更改日志说明,所以希望这里有人有想法吗?
事实证明,CentOS 7 搭载的是 MariaDB 而不是 MySQL,而且 MariaDB 忽略了内部查询的 ORDER BY 子句,让外部查询将内部查询的结果集作为未排序的 table,以获得更好的性能。
这里有两个选项。或者:
添加 MySQL 社区版覆盖并从中安装 MySQL 而不是从 CentOS 存储库安装,就像这篇文章中的一篇那样:https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7
或者将具有 ORDER BY 子句的内部查询修改为也具有 LIMIT 子句,这会导致 MariaDB 将结果集视为有序 table。例如
SELECT * FROM (
SELECT *
FROM tblTable
ORDER BY fldField ASC
LIMIT 10000000
) tmp
GROUP BY fldField
希望这可以为其他人节省一些时间。
我们刚刚将数据库从 MySQL 5.0 服务器迁移到 5.5 服务器,像这样的简单查询似乎不再按预期工作:
SELECT * FROM (
SELECT *
FROM tblTable
ORDER BY fldField ASC
) tmp
GROUP BY fldField
内部查询仍然是 returns 正确排序的记录集,但分组依据不再选择该集的第一条记录。
将顺序切换为 DESC 也没有影响,因此推测分组依据尚未切换为选择最后一条记录。
据我所知,group by实际上只是按照它们创建的顺序选择第一条记录,而不是实际记录集的顺序。如果这有意义?
我似乎找不到任何错误报告或更改日志说明,所以希望这里有人有想法吗?
事实证明,CentOS 7 搭载的是 MariaDB 而不是 MySQL,而且 MariaDB 忽略了内部查询的 ORDER BY 子句,让外部查询将内部查询的结果集作为未排序的 table,以获得更好的性能。
这里有两个选项。或者:
添加 MySQL 社区版覆盖并从中安装 MySQL 而不是从 CentOS 存储库安装,就像这篇文章中的一篇那样:https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7
或者将具有 ORDER BY 子句的内部查询修改为也具有 LIMIT 子句,这会导致 MariaDB 将结果集视为有序 table。例如
SELECT * FROM ( SELECT * FROM tblTable ORDER BY fldField ASC LIMIT 10000000 ) tmp GROUP BY fldField
希望这可以为其他人节省一些时间。