PolarDB从5.6升级到5.7后相同的统计sql,查询出来的结果差别差很多,为什么?
你的 sql本身结果就是不确定的,
SELECT
*
FROM
(
SELECT
t.core_cust_id,
t.receive_amount,
DATE_FORMAT(t.create_date, '%Y-%m-%d') AS create_date
FROM
t_api_log t
WHERE
t.customer_id = '网商银行'
AND t.receive_amount >= 500000
AND t.result_code = '0001'
ORDER BY
t.create_date
) tt
GROUP BY
tt.core_cust_id
比如这里截取的sql片段,group by的字段没有全部在select 列里,这会导致t.receive_amount, DATE_FORMAT(t.create_date, '%Y-%m-%d') AS create_date 的结果是不确定的。可以设置SET sql_mode = 'ONLY_FULL_GROUP_BY' 会发现整个sql是不合法的,建议修改下sql
derived_merge=off, 是保持了跟56一样的执行方式,所以结果是一致的。
本质问题还是sql 不符合'ONLY_FULL_GROUP_BY' 规则 引起的结果不稳定。此回答整理自钉群“PolarDB专家面对面 - 自建/RDS MySQL迁移PolarDB MySQL/大版本升级”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。