Mysql 查找并行时间内的操作记录

Mysql 查找并行时间内的操作记录,mysql,sql,Mysql,Sql,我有一个呼叫数据记录表CDRs,大约有700万行, 每行保存一条通话记录: 唯一标识符、来电号码、接收号码、应答日期时间和持续时间(以秒为单位) 我正在寻找一种高效的方法,来查找由同一接收号码同时处理的呼叫。 我试过的任何问题都花了太长时间 表格结构: CREATE TABLE `cdrs` ( `global_identifier` varchar(32) DEFAULT NULL, `caller_num` int(14) DEFAULT NULL, `receiving

我有一个呼叫数据记录表CDRs,大约有700万行, 每行保存一条通话记录: 唯一标识符、来电号码、接收号码、应答日期时间和持续时间(以秒为单位)

我正在寻找一种高效的方法,来查找由同一接收号码同时处理的呼叫。 我试过的任何问题都花了太长时间

表格结构:

    CREATE TABLE `cdrs` (
  `global_identifier` varchar(32) DEFAULT NULL,
  `caller_num` int(14) DEFAULT NULL,
  `receiving_num` int(14) DEFAULT NULL,
  `call_answer` datetime DEFAULT NULL,
  `call_duration` int(7) DEFAULT NULL,
  KEY `caller_num` (`caller_num`),
  KEY `receiving_num` (`receiving_num`),
  KEY `call_answer` (`call_answer`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
我已经尝试过的查询:

SELECT
    DATE_FORMAT(call_answer,'%Y%m') AS Ym,
    b_num,
    COUNT(*) AS cnt,
    SUM(call_duration) / 60 AS c_dur
FROM
(

SELECT
    ycdr.*


FROM
    cdrs ycdr
    INNER JOIN cdrs ycdr2 ON
        ycdr2.receiving_num = ycdr.receiving_num
        AND ycdr2.caller_num != ycdr.caller_num
WHERE
    ycdr2.call_answer BETWEEN
    ycdr.call_answer AND ycdr.call_answer
    AND ycdr.call_answer >= '2015-01-01'
    AND ycdr.call_answer < '2015-01-05'
GROUP BY
    ycdr.global_identifier

) a
;
解释结果如下:


到目前为止,您尝试了什么?通过我指定的标准将表内部连接到自身,然后通过唯一标识符进行分组,然后分组进行计数和求和您是否检查了查询的执行计划?是的。。。不好…使用索引条件;在何处使用;使用临时设备;如果我提前限制了记录的数量,就在150k行上使用filesort。不可能实际运行它你知道什么比描述你尝试的更好吗?张贴它。你知道什么比解释输出的一小部分更好吗?整个输出…实际结果,没有描述。