MYSQL 5.6和5.7对GROUP BY不同的优化
我有一个需求是获取最新一条带条件的数据
CREATE TABLE Test
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(255) NOT NULL COMMENT ‘字段标记’,
age
varchar(255) NOT NULL COMMENT ‘键’,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
第一次的写法是
SELECT * FROM (SELECT name
FROM Test t WHERE t.age > 18 ORDER BY id DESC) a GROUP BY name
– 5.6
sql解释存在临时表,对临时表进行group by,取得id最新的一条数据
– 5.7
– sql解释表明 执行结果同以下sql,由于没有排序会默认主键排序,那id最小的一条,和预期不符
SELECT name
FROM Test t WHERE t.age > 18 GROUP BY name
建议更换写法
SELECT * FROM Test u WHERE u.id = (SELECT id FROM Test t WHERE t.age > 18 AND u.name
= t.name
ORDER BY t.id DESC LIMIT 1) GROUP BY u.name