最近发现以下2条语句导致系统变慢

[复制链接]
查看11 | 回复4 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
我的机器环境(linux+mysql5.0.4+java),最近发现以下2条语句导致系统变慢
UserSessionLog 有6267689条记录 ,UserEntity 有5万条,
Query_time高达53秒,问原因(group by),如何优化
# Query_time: 53Lock_time: 0Rows_sent: 20Rows_examined: 6267689
select
log.userId, max(log.lastLoginTime) lastLoginTime, count(1) + 1 nrOfLogins,
u.partnerId,u.userName from

UserSessionLog log, UserEntity uwhere
log.userId= u.id group by log.userId
order by lastLoginTime desc li
mit 20;
Query_time高达57秒,问原因(group by),如何优化
# Query_time: 57Lock_time: 0Rows_sent: 5Rows_examined: 10619215
SET timestamp=1241525924;
selectcount(distinct(ul.userId)) number,CASEWHEN ul.lastaccess>curdate() THEN 1 WHEN
(ul.lastaccess>subdate(curdate(),1)
and ul.lastaccessdate_Sub(curdate(), INTERVAL DAYOFMONTH
(curdate())-1 day)) THEN 3
WHEN (ul.lastaccess>date_sub(date_Sub(curdate(), INTERVAL DAYOFMONTH(curdate())-1 day),INTERVAL 1 month)
and ul.lastaccess<DATE_SUB(sys
date(),INTERVAL 1 month)) THEN 4 ELSE 5END as dateInterval fromUserSessionLog ul,UserEntity u
where u.id = ul.userid gro
up by dateInterval;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
增加 冗余字段 换速度
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
基于MySQL的JOIN算法,个人认为你先进行统计,再进行连接速度可能会更快
SELECT log.*,u.partnerId,u.userName
(selectuserId, max(lastLoginTime) lastLoginTime, count(1) + 1 nrOfLogins
from UserSessionLog group by log.userId)log ,UserEntity u
where log.userId= u.id
order by lastLoginTime desc limit 20;

若能保证,UserSessionLog中的userId一定能在UserEntity找到的话,其实可以进步优化(不出意外的话,你这个逻辑是没问题的,从你写的SQL看)
可以进步改为
SELECT log.*,u.partnerId,u.userName
(selectuserId, max(lastLoginTime) lastLoginTime, count(1) + 1 nrOfLogins
from UserSessionLog group by log.userId
order by lastLoginTime desc limit 20)log ,UserEntity u
where log.userId= u.id;
对于你另外一个SQL,你可以考虑使用同样的方式进行修改,你先尝试下我说的这个方式
再确定上是否按这个方法修改另外一个SQL
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
当然你的相关索引需要配套地创建下.....
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
group by log.userIdMYSQL默认会对USERID进行排序.可以在后面加ORDER BY NULL 避免排序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行