Mysql 优化查询获取每个用户每天的总通话持续时间

Mysql 优化查询获取每个用户每天的总通话持续时间,mysql,query-optimization,Mysql,Query Optimization,我从具有以下结构的表call\u details创建了视图HW02 pri|u key |呼叫|呼叫|否|应答|日期|时间|持续时间 我必须找到每个用户每天呼叫的总持续时间。 并将视图创建为 create view hw02 as select calling_no, day(answer_date_time) as days,duration from call_details; 我计算每个订户每天的总持续时间为 select a.calling_no,a.days,sum(b.durat

我从具有以下结构的表
call\u details
创建了视图HW02

pri|u key |呼叫|呼叫|否|应答|日期|时间|持续时间

我必须找到每个用户每天呼叫的总持续时间。 并将视图创建为

create view hw02 as 
select calling_no, day(answer_date_time) as days,duration from call_details;
我计算每个订户每天的总持续时间为

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;

执行此查询需要很多时间。所以我的问题是如何优化这个查询。(数据:-大约150000行)

试试这个,速度会更快,符合您的目的

SELECT
  calling_no, 
  DATE(answer_date_time) as day,
  SUM( duration ) 
FROM 
  call_details
GROUP BY
  calling_no,
  DATE(answer_date_time)
在您的情况下,
视图上的
自连接
本身不需要,我们只需要
用户
调用其他
用户
的总持续时间,按
日期
分组

调用
的持续时间,我想对于一个特定的
调用
来说,被调用的
和调用的
用户
(记录)是相同的。如果您有多个月的数据,您使用的
day()
函数将不会返回正确的
结果
,因此我使用了
date
函数


更多关于mysql中的datetime函数的信息,请尝试此功能,它应该会更快,并满足您的需要

SELECT
  calling_no, 
  DATE(answer_date_time) as day,
  SUM( duration ) 
FROM 
  call_details
GROUP BY
  calling_no,
  DATE(answer_date_time)
在您的情况下,
视图上的
自连接
本身不需要,我们只需要
用户
调用其他
用户
的总持续时间,按
日期
分组

调用
的持续时间,我想对于一个特定的
调用
来说,被调用的
和调用的
用户
(记录)是相同的。如果您有多个月的数据,您使用的
day()
函数将不会返回正确的
结果
,因此我使用了
date
函数


有关mysql中datetime函数的更多信息,

您可以按日期应用分区,然后在调用\u no时聚合持续时间。。。我认为这比比较2个alices的值要好。您可以按日期应用分区,然后在调用\u no时聚合持续时间。。。我认为这比比较两个爱丽丝的价值要好。。