查询减慢了网站的速度,必须使它们执行得更快

时间:2018-04-06 11:32:47

标签: php sql wordpress performance

我在wordpress中有2个查询,这显着减慢了我的网站速度。第一个是

   global $wpdb;
    $tbl = $wpdb->prefix . "my_tournament_matches_events";  
    $result = $wpdb->get_var("SELECT count(*) FROM $tbl WHERE match_id = '$match' AND player_id = '$player' AND event_id = 'app'");
    if($result) { return 'checked="checked"'; 

问题在于,如果他参加游戏,它会检查每个玩家(0.33秒),这意味着每个团队有20个查询(6.6秒,两个团队= 13,2秒)。我想知道我是否可以只用两个查询(每个团队一个)。

第二个查询是

    $output.="<td colspan='2'>".my_fetch_data_from_id($homeplayer->player_id,'data_value')."</td>";
    foreach($events as $event){
        $evcount = $wpdb->get_results("SELECT count(*) as total_events 
                                       FROM $table2 
                                       WHERE match_id='$mid' 
                                       AND player_id='$homeplayer->player_id' 
                                       AND event_id='$event->id'" );
        $total= $evcount[0]->total_events;

        $output.="<td><input type='text' name=hm-$homeplayer->player_id-$event->id value='$total'/></td>";
     }

在第二个查询中,它检查每个玩家,但由于我有大约11个事件,这意味着,它执行11events * 20players * 2teams = 440个查询。是否可以更改代码以减少查询次数和时间?每个第二个查询的平均时间约为0.3秒,因此每个改进都是显着的

2 个答案:

答案 0 :(得分:0)

总结一下:

  • LIMIT 1添加到查询中,这将确保如果查询找到结果,则不会继续查找其他查询;
  • 避免在*中使用count,但只依赖于必填字段;
  • 尽可能在列中添加索引;

为了便于阅读,一致性和一些错误,您可以更改单引号和双引号:

$output.='<td colspan="2">'.my_fetch_data_from_id( $homeplayer->player_id, 'data_value' ).'</td>';
$output.='<td><input type="text" name="hm-'.$homeplayer->player_id-$event->id.'"value="'.$total.'"/></td>';
              // Seems odd here otherwise ^

答案 1 :(得分:-3)

我建议在数据库中添加两个索引。 (以及检查它们是否存在)

ALTER TABLE my_tournament_matches_events 
    ADD INDEX index1 (`player_id`, `match_id`, `event_id`);

ALTER TABLE total_events 
    ADD INDEX index2 (`player_id`, `match_id`, `event_id`);

这应该会大大加快速度。 0.33s是一个缓慢的查询响应时间。