Я использую codeigniter
Это моя модель
<?php class groups_Model extends CI_Model { public function __construct(){ parent::__construct(); } /** * get All groups * @return array object list of groups */ public function get(){ $this->db->select('groups.id,groups.name as group,status.name as status'); $this->db->from('groups'); $this->db->join('status', 'status.id = groups.status'); $this->db->order_by('groups.id', 'ASC'); $this->db->limit($this->config->item('per_page'),$this->uri->segment(4)); $query = $this->db->get(); $total = $query->num_rows(); if($total > 0){ return $query->result(); } return false; } ?>
Теперь у меня 500000 фиктивных записей в моей базе данных
Я набираю 20 записей, используя разбивку на страницы
но мой запрос занимает от 5 до 6 секунд, как ускорить работу базы данных
код контроллера выглядит так
<?php public function groups(){ $this->output->enable_profiler(TRUE); $this->benchmark->mark('code_start'); $this->output->cache(5); $this->load->model('groups_Model'); $this->load->library('pagination'); $this->config->load('pagination'); $config['base_url'] = base_url().'admin/auth/groups'; $config['total_rows'] =$this->groups_Model->count(null); $this->pagination->initialize($config); $data['groupsList']=$this->groups_Model->get(); $this->load->view('admin/templates/header'); $this->load->view('admin/groups',$data); $this->load->view('admin/templates/footer'); $this->benchmark->mark('code_end'); echo $this->benchmark->elapsed_time('code_start', 'code_end'); } ?>
Все запросы, требующие много времени для запуска
DATABASE: database_name (Auth:$db) QUERIES: 5 (5.8955 seconds) (Hide) 1.6279 SELECT * FROM groups 4.2598 SELECT `groups`.`id`, `groups`.`name` as `group`, `status`.`name` as `status` FROM `groups` JOIN `status` ON `status`.`id` = `groups`.`status` ORDER BY `groups`.`id` ASC LIMIT 40, 20 0.0078 SELECT `username` FROM `users` WHERE `id` = '1' 0.0000 SELECT `first_name` FROM `users` WHERE `id` = '1' 0.0000 SELECT `last_name` FROM `users` WHERE `id` = '1'
Используйте разбиение на страницы, это лучший способ его использования
создать их для работы в модели
Модель
public function get_count($table){ return $this->db->count_all_results($table); } public function get_all_userdata($table, $where, $limit, $start){ $query = $this->db->get_where($table, $where, $limit, $start); $data = $query->result_array(); return $data; }
контроллер
$where = array('status' => 0); //pagination $config['base_url'] = base_url('nonactiveusers'); $config['total_rows'] = $this->User_model->get_count(); $config['per_page'] = 5; $config["num_links"] = 3; $config['uri_segment'] = 2; $config['full_tag_open'] = "<ul class='pagination'>"; $config['full_tag_close'] ="</ul>"; $config['num_tag_open'] = '<li>'; $config['num_tag_close'] = '</li>'; $config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>"; $config['cur_tag_close'] = "<span class='sr-only'></span></a></li>"; $config['next_tag_open'] = "<li>"; $config['next_tag_close'] = "</li>"; $config['prev_tag_open'] = "<li>"; $config['prev_tag_close'] = "</li>"; $config['first_tag_open'] = "<li>"; $config['first_tag_close'] = "</li>"; $config['last_tag_open'] = "<li>"; $config['last_tag_close'] = "</li>"; $config['first_link'] = "<<"; $config['last_link'] = ">>"; $this->pagination->initialize($config); $page = $this->uri->segment(3); // your uri segment here $data['links'] = $this->pagination->create_links(); $result = $this->User_model->get_all_userdata("users", $where, $config['per_page'], $page); $data['users'] = $result; $this->load->view('view', $data);