Я пытаюсь выполнить поиск с использованием codeigniter быстрее, я использую библиотеку разбиения на страницы, и мне нужно подсчитать записи, возвращенные из запроса, на таблицу, содержащую более 1,2 миллиона записей ... Функция num_rows() очень медленная (примерно 3 секунды)Codeigniter count too slow - pagination
public function search()
{
$this->output->enable_profiler(TRUE);
$data = array();
$query = $this->input->get('query');
$filter = $this->input->get('f');
$hd = $this->input->get('hd');
if($hd == 'true'):
$this->db->where('hd',1);
endif;
$request = urldecode($query);
$where = "MATCH (name,tags) AGAINST ('".$request."' IN BOOLEAN MODE)";
$this->db->where($where);
$get_vars = $this->input->get();
if(is_array($get_vars) && ($this->input->get('query'))):
$config['suffix'] = '?'.http_build_query($get_vars,'', '&');
endif;
$config['base_url'] = base_url('search');
$config['per_page'] = 8;
$config['num_links'] = 8;
$config['full_tag_open'] = '<div class="pagination"><ul>';
$config['full_tag_close'] = '</ul></div><!--pagination-->';
$config['first_link'] = '« First';
$config['first_tag_open'] = '<li class="prev page">';
$config['first_tag_close'] = '</li>';
$config['last_link'] = 'Last »';
$config['last_tag_open'] = '<li class="next page">';
$config['last_tag_close'] = '</li>';
$config['next_link'] = 'Suivant →';
$config['next_tag_open'] = '<li class="next page">';
$config['next_tag_close'] = '</li>';
$config['prev_link'] = '← Précédent';
$config['prev_tag_open'] = '<li class="prev page">';
$config['prev_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li class="page">';
$config['num_tag_close'] = '</li>';
$query = clone $this->db;
$config['total_rows'] = $query->get('videos')->num_rows();
$config['segment'] = $this->uri->segment(2);
$this->pagination->initialize($config);
$data['results'] = $this->db->get('videos',$config['per_page'],$this->uri->segment(2))->result();
$this->load->view('search',$data);
}
Какие-либо решения?
http://stackoverflow.com/questions/12864557/select-count-vs-mysql-num-rows – sintakonte
Вы можете просто получить данные, поместить их в таблицу и использовать разбиение на страницы js. –
'num_rows()' вероятно, извлекает каждую запись из БД и использует функцию 'count()' PHP в наборе результатов. Самая эффективная вещь, которую вы можете сделать, - запустить выделенный 'select count (*) как total_videos из запроса видео и использовать это значение. – MonkeyZeus