我们刚刚将一个数据库从MySQL5.0服务器迁移到5.5服务器,像这样的简单查询似乎不再像预期的那样工作:
SELECT * FROM (
SELECT *
FROM tblTable
ORDER BY fldField ASC
) tmp
GROUP BY fldField
内部查询仍然返回一个顺序正确的记录集,但是groupby不再选择该记录集的第一条记录。
将顺序切换到desc也没有影响,因此推测groupby没有切换到选择最后一条记录。
据我所知,groupby实际上只是根据第一条记录的创建顺序而不是实际记录集的顺序来选择它们。这有道理吗?
我似乎找不到任何错误报告或变更记录,所以希望有人在这里有想法请?
1条答案
按热度按时间j8ag8udp1#
事实证明,centos 7提供的是mariadb而不是mysql,并且mariadb忽略了内部查询的order by子句,将外部查询作为未排序的表来处理内部查询的结果集,以获得更好的性能。
这里有两种选择。或者:
添加mysql community edition overlay并从中安装mysql,而不是从centos存储库安装,如以下文章所示:https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7
或者修改具有order by子句的内部查询,使其也具有limit子句,从而使mariadb将结果集视为有序表。例如
希望这能帮别人省点时间。