MySQL搜索查询速度很慢

时间:2014-09-08 12:47:46

标签: mysql sql performance select join

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

中数据库的示例

欢迎任何有关如何提高性能的建议。

我尝试在某个时候使用“查看”使用不同的查询来缩小搜索结果,但是还没有运气。

1 个答案:

答案 0 :(得分:0)

由于DB的结构无法更改,并且通配符搜索需要很长时间,因此我决定使用mysql View

在视图中,我查询按扩展名分组的所有调用,之后我创建了另一个带有通配符搜索的视图(比重新遍历所有数据库的速度快很多)。

这也有助于总调用查询和分页。响应时间非常好。