我在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秒,因此每个改进都是显着的
答案 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是一个缓慢的查询响应时间。