explain一条sql语句好几百秒过去了没有反应。
时间:2011-07-06
来源:互联网
我用explain SELECT sum(num) num, grp_id, user_id, type
FROM (SELECT r.grp_id, m.message_type type, count(*) num, r.user_id
FROM sms_send s, sms_recv r, message_info m
WHERE r.recv_time >= '2011-07-01 00:00:00'
and r.recv_time < '2011-07-02 00:00:00'
AND s.message_id = m.message_id
AND m.message_type IN (0, 1, 2, 3, 4, 5)
and s.dest_addr = r.org_addr
group by r.grp_id, m.message_type, r.user_id
union all
select s.grp_id, m.message_type type, count(*) num, s.user_id
from sms_send s, message_info m
where s.message_id = m.message_id
and s.send_time >= '2011-07-01 00:00:00'
and s.send_time < '2011-07-02 00:00:00'
group by s.grp_id, m.message_type, s.user_id) grs
group by grp_id, type, user_id
发现explain了已经300多秒过去了,也没有出结果是啥原因啊,
我单独exlain SELECT r.grp_id, m.message_type type, count(*) num, r.user_id
FROM sms_send s, sms_recv r, message_info m
WHERE r.recv_time >= '2011-07-01 00:00:00'
and r.recv_time < '2011-07-02 00:00:00'
AND s.message_id = m.message_id
AND m.message_type IN (0, 1, 2, 3, 4, 5)
and s.dest_addr = r.org_addr
group by r.grp_id, m.message_type, r.user_id
和exlain SELECT s.grp_id, m.message_type type, count(*) num, s.user_id
from sms_send s, message_info m
where s.message_id = m.message_id
and s.send_time >= '2011-07-01 00:00:00'
and s.send_time < '2011-07-02 00:00:00'
group by s.grp_id, m.message_type, s.user_id
都没问题,而且在另外的一个数据库中,数据量和上面的那个数据库的数据量差不多,explain很快就出来结果,为什么在上面那个数据库就不行呢,而且我还特别执行了analyze 这三张表,都一样的结果。
谁能帮俺解决一下啊。
FROM (SELECT r.grp_id, m.message_type type, count(*) num, r.user_id
FROM sms_send s, sms_recv r, message_info m
WHERE r.recv_time >= '2011-07-01 00:00:00'
and r.recv_time < '2011-07-02 00:00:00'
AND s.message_id = m.message_id
AND m.message_type IN (0, 1, 2, 3, 4, 5)
and s.dest_addr = r.org_addr
group by r.grp_id, m.message_type, r.user_id
union all
select s.grp_id, m.message_type type, count(*) num, s.user_id
from sms_send s, message_info m
where s.message_id = m.message_id
and s.send_time >= '2011-07-01 00:00:00'
and s.send_time < '2011-07-02 00:00:00'
group by s.grp_id, m.message_type, s.user_id) grs
group by grp_id, type, user_id
发现explain了已经300多秒过去了,也没有出结果是啥原因啊,
我单独exlain SELECT r.grp_id, m.message_type type, count(*) num, r.user_id
FROM sms_send s, sms_recv r, message_info m
WHERE r.recv_time >= '2011-07-01 00:00:00'
and r.recv_time < '2011-07-02 00:00:00'
AND s.message_id = m.message_id
AND m.message_type IN (0, 1, 2, 3, 4, 5)
and s.dest_addr = r.org_addr
group by r.grp_id, m.message_type, r.user_id
和exlain SELECT s.grp_id, m.message_type type, count(*) num, s.user_id
from sms_send s, message_info m
where s.message_id = m.message_id
and s.send_time >= '2011-07-01 00:00:00'
and s.send_time < '2011-07-02 00:00:00'
group by s.grp_id, m.message_type, s.user_id
都没问题,而且在另外的一个数据库中,数据量和上面的那个数据库的数据量差不多,explain很快就出来结果,为什么在上面那个数据库就不行呢,而且我还特别执行了analyze 这三张表,都一样的结果。
谁能帮俺解决一下啊。
作者: lanbaibai 发布时间: 2011-07-06
系统load高?
作者: rucypli 发布时间: 2011-07-06
没多高,公司的一个项目开发服务器,总共7,8个人用,能有多高
作者: lanbaibai 发布时间: 2011-07-06
show processlist;看看
作者: rucypli 发布时间: 2011-07-06
猜测sms_send s, sms_recv r这两个表的数据量太大,
sms_send有上千万的数据,sms_recv不太多,只有十万左右,
sms_recv的recv_time和org_addr字段建有索引,sms_send的dest_addr字段没有建立索引,
因为mysql的优化模式基本基于CBO模式,
当没有子查询的时候,对于优化器影响不大,当出现子查询的时候,
exlain select * from (SELECT r.grp_id, m.message_type type, count(*) num, r.user_id
FROM sms_send s, sms_recv r, message_info m
WHERE r.recv_time >= '2011-07-01 00:00:00'
and r.recv_time < '2011-07-02 00:00:00'
AND s.message_id = m.message_id
AND m.message_type IN (0, 1, 2, 3, 4, 5)
and s.dest_addr = r.org_addr
group by r.grp_id, m.message_type, r.user_id) t
这种情况CBO计算的时候估计确实需要很长时间。
sms_send有上千万的数据,sms_recv不太多,只有十万左右,
sms_recv的recv_time和org_addr字段建有索引,sms_send的dest_addr字段没有建立索引,
因为mysql的优化模式基本基于CBO模式,
当没有子查询的时候,对于优化器影响不大,当出现子查询的时候,
exlain select * from (SELECT r.grp_id, m.message_type type, count(*) num, r.user_id
FROM sms_send s, sms_recv r, message_info m
WHERE r.recv_time >= '2011-07-01 00:00:00'
and r.recv_time < '2011-07-02 00:00:00'
AND s.message_id = m.message_id
AND m.message_type IN (0, 1, 2, 3, 4, 5)
and s.dest_addr = r.org_addr
group by r.grp_id, m.message_type, r.user_id) t
这种情况CBO计算的时候估计确实需要很长时间。
作者: lanbaibai 发布时间: 2011-07-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28