作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们刚刚将数据库从 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/
我是一名优秀的程序员,十分优秀!