SQL优化--别名的错误使用
原SQL:
SELECT
COUNT(1) AS likenum,
DATE_FORMAT(l.likeTime,’%Y-%m-%d’) AS statdate,
cid,
os
FROM user_like_room_xx
WHERE
DATE_FORMAT(l.likeTime,’%Y-%m-%d’) BETWEEN ‘2020-08-27’ AND ‘2020-08-27’
GROUP BY statdate, cid, os;
SQL在数据库中执行情况:
EXPLAIN SELECT COUNT(1) AS likenum, DATE_FORMAT(l.likeTime,’%Y-%m-%d’) AS statdate, cid, os FROM user_like_room_xx
WHERE DATE_FORMAT(l.likeTime,’%Y-%m-%d’) BETWEEN ‘2020-08-27’ AND ‘2020-08-27’ GROUP BY statdate, cid, os
可以看到执行SQL时使用了临时表和文件排序。
查看该表索引:
show index from user_like_room_xx;
可以看出索引中没有别名的字段,但是有别名对应的字段名,修改GROUP BY后的 statdate 为原表中的字段likeTime。
改后SQL的执行情况:
EXPLAIN SELECT COUNT(1) AS likenum, DATE_FORMAT(l.likeTime,’%Y-%m-%d’) AS statdate, cid, os FROM user_like_room_xx
WHERE DATE_FORMAT(l.likeTime,’%Y-%m-%d’) BETWEEN ‘2020-08-27’ AND ‘2020-08-27’ GROUP BY l.likeTime, cid, os
可以看出错误使用别名使得SQL执行时,使用了临时表和文件重排。