在运行 Codeigniter 的 $searchterm = $this->search_model->searchterm_handler($this->input->get_post('searchterm', TRUE) 之后,我将这个 MySQL 查询加载到我的家庭 Controller 中));
我的执行时间为 0.7110
我模型中的查询:
<?php
class Search_Model extends CI_Model
public function search($searchterm,$limit)
{
$sql = "SELECT cast(s.req_date as Date) as Date, SUM(s.sTransaction)+SUM(r.rTransaction) as SUMt, SUM(s.sSuccess)+ SUM(r.rSuccess) as SUMs, s.sTransaction, r.rTransaction, s.sSuccess, r.rSuccess
FROM
(SELECT s.req_date, COUNT(*) as sTransaction, SUM(s.status = 0) as sSuccess
FROM transaction_log_ats_201503 as s WHERE cast(s.req_date as time) BETWEEN '00:00:00' AND '$searchterm'
GROUP BY cast(req_date as Date) desc) as s
JOIN
(SELECT r.req_date, COUNT(*) as rTransaction, SUM(r.status = 0) as rSuccess
FROM transaction_log_atr_201503 as r WHERE cast(r.req_date as time) BETWEEN '00:00:00' AND '$searchterm'
GROUP BY cast(req_date as Date) desc) as r
ON cast(s.req_date as date)=cast(r.req_date as date)
GROUP BY Date desc";
$q = $this->db->query($sql);
if($q->num_rows() > 0)
{
foreach($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
else
{
return 0;
}
}
?>
有没有提高查询性能的可行方法?
谢谢。
最佳答案
我认为您缺少一个“)”。
为什么在子查询中有DESC
;它不控制任何有用的东西。
MySQL (直到 5.6) 无法优化
FROM (SELECT ...) JOIN (SELECT ...) ON ...
没有索引,所以它对 tmp 表进行全表扫描,因此非常慢。
可能的解决方案:
- 升级到 5.6。
- 将其中一个子查询放入
TEMPORARY
表中,并在reg_date
上为其指定一个 INDEX。
关于mysql - 如何提高 Codeigniter 中的 MySQL 查询性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404545/