SELECT
node_session_seq,
call_start,
YEAR(call_start) AS year,
quarter(call_start) as qtr,
ADDDATE(LAST_DAY(SUBDATE(call_start, INTERVAL 1 MONTH)),1) AS month,
CAST(call_start AS DATE) AS date,
CASE WHEN MAX(queue_time) <= sla AND MAX(cont_disp) = 1 THEN 0 ELSE 1 END AS presented,
CASE WHEN MAX(cont_disp) = 2 THEN 1 ELSE 0 END AS handled,
CASE WHEN MAX(queue_time) <= sla AND MAX(cont_disp = 2) THEN 1 ELSE 0 END AS met_sla,
CASE WHEN MAX(queue_time) > sla AND MAX(cont_disp = 1) THEN 1 ELSE 0 END AS abandoned
FROM
emsupport.t_cisco_csq_ad csq_ad where call_start > '2013-03-30 00:00:00'
GROUP BY node_session_seq
以上是我用于构建用于呼叫报告的datamart的查询。我的问题围绕着性能 - 目前桌面上有5个索引:
我应该只为queue_time和SLA添加索引吗? SLA的时间戳格式为45,60,90,120,200或300,与队列时间相同。队列时间会有很多共同之处;我们的大部分通话音量都以&lt; 60秒目前我在23-25秒内看到大约1000行的表现。这是一个约515k行的部分数据集,总数约为750k。
索引可以解决这个问题吗?或者我还应该做些什么呢?我不是一个DBA,只是一个知道足够多的SQL来获得更多工作的人。
感谢您的帮助 - 哦和PS - 插入性能不是问题。它通过脚本每天完成非工作时间,仅插入新数据。
吉姆
//为表编辑/添加创建语句
CREATE TABLE `t_cisco_csq_ad` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`node_session_seq` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`call_start` datetime DEFAULT NULL,
`call_end` datetime DEFAULT NULL,
`cont_disp` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`origin_dn` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`dest_dn` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`called_number` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`app_name` varchar(90) COLLATE utf8_unicode_ci DEFAULT NULL,
`csq_name` varchar(90) COLLATE utf8_unicode_ci DEFAULT NULL,
`queue_time` time DEFAULT NULL,
`agent_name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`ring_time` time DEFAULT NULL,
`talk_time` time DEFAULT NULL,
`work_time` time DEFAULT NULL,
`isrna` tinyint(1) DEFAULT '0',
`agent_resourceid` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`sla` time DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_call_start` (`call_start`),
KEY `i_csq_name` (`csq_name`),
KEY `i_app_name` (`app_name`),
KEY `i_cont_disp` (`cont_disp`)
ENGINE=InnoDB AUTO_INCREMENT=676886 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
答案 0 :(得分:0)
唯一有用的索引是INDEX(call_start)
。
闻起来cont_disp
应该是TINYINT UNSIGNED
。或者也许ENUM(...)