mysql - 如何提高 Codeigniter 中的 MySQL 查询性能?

标签 mysql performance codeigniter

在运行 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/

相关文章:

javascript - 我应该在什么时候或在什么情况下使 jQuery 中的对象无效?

mongodb - MongoDB 是为大量更新而构建的吗?

mysql - 与此 MySQL 查询等效的 Active Record - CodeIgniter

mysql - Drupal-6:这个节点出了什么问题?

mysql - 使用 CodeIgniter Active Record 语句

java - 高性能线程安全编码

php - HTTP 包装器不支持可写连接(CodeIgniter 问题?)

php - 无法在mysql中保存增量值

javascript - 如何确定我的 ajax 请求是在客户端还是服务器端失败?

mysql - 如何显示每个评级的员工数量?