如何修复慢速sql查询

时间:2016-11-21 09:58:36

标签: php mysql sql

我正在制作一本wp留言簿,但我在某个地方犯了一个错误。起初我已尝试使用join但是由于所有这些条件而无法让它正常工作所以我写了这个:

$query = "  
        (select *,
        (select count(cid) from ctable WHERE nid = vid) as posts,
        (select timestamp from ctable where nid = vid order by timestamp desc limit 1) as lt,
        (select count(vid) from ntable) as total
        FROM ntable
        )";

它确实完成了它所做的事情,但它非常缓慢。我知道我大喊使用加入,但我无法弄明白。

3 个答案:

答案 0 :(得分:0)

根据我的Exp级别..来更新你的查询时使用nolocks,

$query = '(select *,
        (select count(cid) from ctable with(nolock) WHERE nid = vid) as posts,
        (select timestamp from ctable with(nolock) where nid = vid order by timestamp desc limit 1) as lt,
        (select count(vid) from ntable with(nolock)) as total
        FROM ntable with(nolock)
        )';

并且您正在使用Order by for timestamp列而不是使用getdate()-1(表示旧数据的天数,以便查询将提高其性能。)

答案 1 :(得分:0)

连接查询可能如下所示(很难确定,因为您没有提供表定义)

select *,p.posts,t.ts,(select count(*) from ntable) total 
 from ntable
 join (select vid,count(*) posts from ctable group by vid) p on p.nid = vid
 join (select vid,max(timestamp) ts from ctable group by vid) t on t.nid = vid

但假设你有关于nid和vid的索引我怀疑你是否会看到改进 - 我很想知道。

答案 2 :(得分:0)

它没有。问题不在于获取足够快的数据,问题在于显示它们的顺序(lt)。花费的时间最长。