我有大约 400 多条记录要从此方法检索,加载页面几乎需要 2 分钟。所以请帮助我如何减少这个方法的加载时间。
function teacher_attendance_selector()
{
$data['year'] = $this->input->post('year');
$data['timestamp'] =strtotime($this->input->post('timestamp'));
$query = $this->db->get_where('teacher_attendance' ,array(
'teacher_id'=>$data['teacher_id'],
'year'=>$data['year'],
));
if($query->num_rows() < 1) {
$teachers = $this->db->get_where('teacher' , array(
))->result_array();
foreach($teachers as $row) {
$attn_data['year'] = $data['year'];
$attn_data['timestamp'] = $data['timestamp'];
$attn_data['teacher_id'] = $row['teacher_id'];
$this->db->insert('teacher_attendance' , $attn_data);
}
}
redirect(base_url().'index.php?admin/manage_teacher_attendance_view/'.$data['timestamp'],'refresh');
}
最佳答案
您的插入查询花费了很长时间。 按照下面建议的方式,您可以将所有数据存储在一个数组中,然后只需使用一个查询即可插入该数组中存储的所有记录。
请参阅下面的代码,您将获得更多如何实现性能的想法。
function teacher_attendance_selector()
{
$data['year'] = $this->input->post('year');
$data['timestamp'] =strtotime($this->input->post('timestamp'));
$query = $this->db->get_where('teacher_attendance' ,array(
'teacher_id'=>$data['teacher_id'],
'year'=>$data['year'],
));
if($query->num_rows() < 1) {
$teachers = $this->db->get_where('teacher' , array())->result_array();
$arr_batchinsert = array();
foreach($teachers as $row) {
$attn_data['year'] = $data['year'];
$attn_data['timestamp'] = $data['timestamp'];
$attn_data['teacher_id'] = $row['teacher_id'];
// PREPARE ARRAY FOR BATCH INSERT
$arr_batchinsert = $attn_data;
}
// insert here using insert_batch
$this->db->insert_batch('teacher_attendance', $arr_batchinsert );
}
redirect(base_url().'index.php?admin/manage_teacher_attendance_view/'.$data['timestamp'],'refresh');
}
关于php - 如何减少mysql、codeigniter数据的加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41216181/