gpt4 book ai didi

MySQL "GROUP BY"忽略记录顺序

转载 作者:行者123 更新时间:2023-11-29 17:38:10 25 4
gpt4 key购买 nike

我们刚刚将数据库从 MySQL 5.0 服务器迁移到 5.5 服务器,像这样的简单查询似乎不再按预期工作:

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

内部查询仍然返回正确排序的记录集,但分组依据不再选择该集的第一条记录。

将顺序切换为 DESC 也没有影响,因此推测分组依据尚未切换为选择最后一条记录。

据我所知,分组实际上只是按照创建的顺序选择第一条记录,而不是实际记录集的顺序。如果这有意义吗?

我似乎找不到任何错误报告或更改日志说明,所以希望这里有人有想法吗?

最佳答案

事实证明,CentOS 7 搭载了 MariaDB 而不是 MySQL,并且 MariaDB 忽略了内部查询的 ORDER BY 子句,让外部查询将内部结果集作为无序表处理,以获得更好的性能。

这里有两个选项。要么:

  • 添加 MySQL 社区版覆盖并从中安装 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

希望这可以节省其他人一些时间。

关于MySQL "GROUP BY"忽略记录顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50152817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com