Php 优化Codeigniter查询
我有一个至少有650000条记录的表,并且将增加到15M+条记录。我只是想知道为什么加载一些页面大约需要8-14秒,特别是在搜索时,以及在将Php 优化Codeigniter查询,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个至少有650000条记录的表,并且将增加到15M+条记录。我只是想知道为什么加载一些页面大约需要8-14秒,特别是在搜索时,以及在将页面id(分页)指向最后一页时,考虑到查询非常有限 型号: function fetch_persons($limit, $id, $search, $district = null, $city = null) { if($search) { $this->db->group_start();
页面id(分页)
指向最后一页时,考虑到查询非常有限
型号:
function fetch_persons($limit, $id, $search, $district = null, $city = null) {
if($search) {
$this->db->group_start();
$this->db->like('persons.fullname', $search, 'after');
$this->db->group_end();
}
if(!is_null($district)) {
$this->db->where('persons.district_code', $district);
}
if(!is_null($city)) {
$this->db->where('persons.city_code', $city);
}
if(!is_null($barangay)) {
$this->db->where('persons.brgy_code', $barangay);
}
$this->db->select('
persons.id,
persons.fullname,
persons.address,
persons.sex,
persons.deceased,
city.name as city,
district.name as district,
');
$this->db->join('city', 'city.code = persons.city_code', 'left');
$this->db->join('district', 'district.code = persons.district_code', 'left');
$this->db->limit($limit, (($id-1)*$limit));
$this->db->order_by('persons.id', 'ASC');
$query = $this->db->get("persons");
if ($query->num_rows() > 0) {
return $query->result_array();
}
return false;
}
我尝试了$this->db->cache_on()但是这对我没有好处
在执行搜索
或类似的时,是否所有数据都得到处理?
以及限制1006000
有哪些方法可以更好地优化查询
有哪些替代方案 您是否尝试为数据库编制索引?如果您没有这样做,则可以节省大约80%的页面加载时间。我怀疑您的查询是否存在问题(但我可能错了),而是实际数据库设置效率低下。您的数据库表是否包含您正在搜索或加入的字段的索引?如果禁用一个或多个搜索条件,会有多大区别?使用LIMIT
解决LIMIT
问题不会减少处理时间,因为生成结果集所需的所有工作都将在输出结果集之前完成,这就是LIMIT
通常出现的情况:它限制传输的数据量。这不是codeigniter的问题,而是MySQL的问题。由于缺少或误用索引,您很可能正在进行一次或多次完整扫描。如果看不到你的桌子结构就很难找出凶手,但是对查询运行EXPLAIN
将有助于了解下一步,首先-在查询之前进行解释,检查索引的使用情况-然后用这些信息更新您的问题,并包括您的表结构和索引-用这么少的信息回答这样的问题是不可能的信息…请在主字段和在where子句中使用它的上添加索引。另外,请保密您的桌子结构,以便我们提供更好的视觉效果。