更改Query的限制而不在CodeIgniter中再次执行它

时间:2012-12-04 16:13:52

标签: php sql codeigniter

是否可以更改Query的限制而不再执行它。

这是我的代码:

$this->db->select("SQL_CALC_FOUND_ROWS e.emp_no, e.birth_date, e.first_name, e.last_name, e.gender, e.hire_date, t.title, s.salary, d.dept_name", FALSE)
            ->from('employees AS e')
            ->join('titles AS t', 'e.emp_no = t.emp_no')
            ->join('salaries AS s', 't.emp_no = s.emp_no')
            ->join('dept_emp AS de', 's.emp_no = de.emp_no')
            ->join('departments AS d', 'de.dept_no = d.dept_no')
            ->join('dept_manager AS dm', 'd.dept_no = dm.dept_no')
            ->order_by($sort_by, $sort_order)
            ->group_by('e.emp_no')
            ->where('t.title', $title)
                        ->limit($limit, $offset);


    $ret['rows'] = $q->get()->result(); 

我正在使用分页,所以如果我继续加载一个返回大约100,000行的查询,它会减慢返回。

我想通过运行查询一次然后动态更改限制来加快速度。

2 个答案:

答案 0 :(得分:0)

首先,这与Code Igniter或PHP无关。这取决于您的数据库。

从那里,我相信它将取决于查询。如果你有一个没有排序的正常SELECT查询,那么MySQL至少会在达到限制后停止。超出该限制的数据不可用。

也许如果您有一个子查询,并且受外部查询的限制,则可以缓存子查询的结果,具体取决于您的服务器配置以及数据的易变性。一开始你的表现会很差,因为整个查询需要完成,但后续查询可能会更快。

答案 1 :(得分:0)

限制不会减慢您的应用程序。 “SQL_CALC_FOUND_ROWS”确实如此。众所周知,它可以减慢查询速度,我的意思是SLOW。请查看此帖子以获取基准并解释其工作原理:http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/