优化查询获得每个订户的总呼叫持续时间

时间:2013-05-01 13:03:05

标签: mysql query-optimization

我查看了从具有以下结构的表call_details创建的HW02。

pri_key | calling_no | called_no | answer_date_time | Duration

我必须找到每个订阅者在一天内调用的总持续时间。 并创建视图

create view hw02 as 
select calling_no, day(answer_date_time) as days,duration from call_details;

我计算每个订阅者每天的total_duration为

select a.calling_no,a.days,sum(b.duration) 
from hw02 as a, hw02 as b 
where a.calling_no=b.calling_no and a.days=b.days;

此查询需要大量时间才能执行。所以我的问题是如何优化此查询。 (数据: - 大约150,000行)

1 个答案:

答案 0 :(得分:1)

试试这个,应该更快,并为您的目的服务

SELECT
  calling_no, 
  DATE(answer_date_time) as day,
  SUM( duration ) 
FROM 
  call_details
GROUP BY
  calling_no,
  DATE(answer_date_time)

在您的情况下,self-join本身不需要view,我们只需要user次调用其他users的总持续时间,按{分组{1}}。

对于datecall call(记录),我认为特定called calling的持续时间相同。如果您有多个月的数据,那么您使用的user函数将不会返回正确的day(),因此我使用了results函数

更多关于mysql中的datetime函数,https://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html