SELECT
cast(t1.destination as unsigned) as prefix,
t2.destination as destination,
FORMAT(sum(t1.terminatecauseid = 1), 0) as calls,
IFNULL(sec_to_time(avg(case when t1.terminatecauseid = 1 then t1.sessiontime end)), 0) as aloc,
CONCAT(TRUNCATE(sum(t1.terminatecauseid = 1) * 100 / count(*), 1), '%') as asr,
sum(case when t1.terminatecauseid = 1 then t1.sessiontime end) as duration
FROM
cc_call AS t1
inner join
cc_prefix as t2 ON t1.destination = t2.prefix
inner join
cc_country as t4 ON t1.destination like CONCAT(t4.countryprefix, '%')
WHERE
t1.card_id = '133' AND t1.starttime >= ('2014-06-1')
group by t4.countryprefix
having duration is not null
order by duration DESC
LIMIT 0 , 25
我正在制作搜索引擎,我已经提出了正确的查询来获取我需要的信息。数据库是巨大的(1GB)和查询有时崩溃httpd服务器。
运行此查询,为分页运行另一个类似的查询(以确定页数),并运行第三个查询以查看持续时间和调用的总量。
所有这些结合导致非常糟糕的表现。 以下是sqlfiddle
中数据库的示例欢迎任何有关如何提高性能的建议。
我尝试在某个时候使用“查看”使用不同的查询来缩小搜索结果,但是还没有运气。
答案 0 :(得分:0)
由于DB的结构无法更改,并且通配符搜索需要很长时间,因此我决定使用mysql View。
在视图中,我查询按扩展名分组的所有调用,之后我创建了另一个带有通配符搜索的视图(比重新遍历所有数据库的速度快很多)。
这也有助于总调用查询和分页。响应时间非常好。