mysql“groupby”忽略记录顺序

xyhw6mcr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(280)

我们刚刚将一个数据库从MySQL5.0服务器迁移到5.5服务器,像这样的简单查询似乎不再像预期的那样工作:

SELECT * FROM (
        SELECT *
        FROM tblTable
        ORDER BY fldField ASC
    ) tmp
    GROUP BY fldField

内部查询仍然返回一个顺序正确的记录集,但是groupby不再选择该记录集的第一条记录。
将顺序切换到desc也没有影响,因此推测groupby没有切换到选择最后一条记录。
据我所知,groupby实际上只是根据第一条记录的创建顺序而不是实际记录集的顺序来选择它们。这有道理吗?
我似乎找不到任何错误报告或变更记录,所以希望有人在这里有想法请?

j8ag8udp

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将结果集视为有序表。例如

SELECT * FROM (
    SELECT *
    FROM tblTable
    ORDER BY fldField ASC
    LIMIT 10000000
) tmp
GROUP BY fldField

希望这能帮别人省点时间。

相关问题