我有这样的MySQL查询这我加载到我家控制器和运行后,笨的$searchterm = $this->search_model->searchterm_handler($this->input->get_post('searchterm', TRUE));
我得到的0.7110
如何提高Codeigniter中的MySQL查询性能?
查询的执行时间我的模型里面:
<?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;
}
}
?>
有什么提高查询性能的可靠方法?
谢谢。
您将需要重新设计您的查询,以便它不使用嵌套的select语句并仅依赖连接。然后,您需要将索引添加到您用于连接的字段中。 – 2015-04-02 15:37:44
你能告诉我如何在这种情况下使用INDEX吗?谢谢 – 2015-04-09 03:00:48
不知道你的表结构。首先是重新设计你的查询来摆脱嵌套的select语句。它可能会更好地执行,如果你把它分成几个查询,并在php中关联数据。索引是一个广泛的主题,但没有那么复杂的概念。做一些阅读你会发现很多关于这个主题的教程 – 2015-04-09 08:12:32