在一张表里
想要得到各IP对应最大ID的一条记录 就相当于是得到每个人的最新发言之类的
按IP分组 找出对应的最大IP
听网友说我这个是因为MySQL的版本太低才需要写的这么复杂,
其他稍微高一点的版本 SELECT * FROM auto_user GROUP BY ip ORDER BY id DESC ; 即可(我没试过)
这个表
第一种方式 子查询 先排序 然后分组 (会比第二种慢)
image.png
没有使用到索引,使用了临时表,出现Using filesort
Using filesort 是Mysql里一种速度比较慢的外部排序
第二种 热心网友告诉我的写法
image.png
使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据
https://blog.csdn.net/h106140873/article/details/80999990
速度
速度 emmm 本地试了好几次都是一样的速度,或许有参考价值
SELECT * FROM auto_user ;
SELECT * FROM (SELECT * FROM auto_user ORDER BY id DESC) AS a GROUP BY ip;
SELECT * FROM auto_user a WHERE not exists (SELECT 1 FROM auto_user b WHERE a.ip=b.ip AND a.id<b.id);
alter table auto_user add index room_ip_id(ip,id); -- 该表添加了联合索引 id为主键