在我的mysql数据库中,我的行中有超过100万行。使用Join查询我获取了数据库,但是它需要更多的时间来检索数据,并且还需要时间来使用php中的foreach循环来显示数据。它显示错误,如程序无响应。
SQl查询是执行的,需要更多时间。在codeigniter中显示数据并使用jquery分页,也需要更多时间来显示。
我现在快速使用Codeigniter分页。但它在SQL中显示错误。请找到这个
表
Table name - catch_estimation
estiamteid int(11) PRI
centerid int(11)
centername varchar(100)
month int(2)
year int(5)
totalcatch int(11)
totalefforts int(11)
totalafh int(11)
noofgears int(11)
created_date datetime
modified_date datetime
表名为gearwise_estimation
id int(11) NO PRI
estimationid int(11)
centername varchar(50)
gearname varchar(20)
gear_totalefforts int(11)
gear_totalafh int(11)
gear_totalcatch int(11)
$this->db->select('start.*');
$this->db->from('gearwise_estimation');
$this->db->join('catch_estimation', 'gearwise_estimation.estimationid = catch_estimation.estiamteid and year = '.$year);
foreach($month as $mon):
$this->db->like('catch_estimation.month',trim($mon));
endforeach;
foreach($gear as $gr):
$this->db->like('gearwise_estimation.gearname',trim($gr));
endforeach;
foreach($centername as $zo):
$this->db->like('catch_estimation.centerid',trim($zo));
endforeach;
$this->db->order_by("catch_estimation.month", "asc");
$this->db->order_by("catch_estimation.centername", "asc");
但它显示错误
SELECT `start`.* FROM `gearwise_estimation` JOIN `catch_estimation` ON `gearwise_estimation`.`estimationid` = `catch_estimation`.`estiamteid` and `year` = 2018 WHERE catch_estimation.month LIKE '%8%' ESCAPE '!' AND catch_estimation.month LIKE '%9%' ESCAPE '!' AND gearwise_estimation.gearname LIKE '%OBGN%' ESCAPE '!' AND catch_estimation.centerid LIKE '%2%' ESCAPE '!' ORDER BY `catch_estimation`.`month` ASC, `catch_estimation`.`centername` ASC
如果表中有10万个+行,那么进行DOM级别分页是不可行的。目前你的分页是从数据库中获取所有10万行,然后在DOM级别上进行隐藏/显示以形成分页。
您应该在mysql中应用limit
子句,然后只获取每页所需的记录。
See this供您参考。
一旦只显示所需的数据,就可以通过添加索引继续优化更多,使用Explain获取查询执行细节。
你至少有INDEX(year)
?还有每个表格中的estimateid索引(或PRIMARY KEY)?
你需要所有的栏目(SELECT *
)吗?如果有任何TEXT
或BLOB
,这可能特别昂贵。
你想要获得一百万(10万)行吗?网络可能会窒息。
PHP有一个内存限制,可能会在一次性抛出大量数据时窒息。
如果您首先获取所有行,分页是非常昂贵的。
如果你使用LIMIT
和OFFSET
,分页也很昂贵。
如果你“记住你离开的地方”,分页可以是有效的。见this。