1

是否可以更改查询的限制而无需再次执行。

这是我的代码:

$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 行的查询,它会减慢返回速度。

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

4

2 回答 2

0

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

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

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

于 2012-12-04T16:17:58.353 回答
0

该限制不会减慢您的应用程序。“SQL_CALC_FOUND_ROWS”可以。众所周知,它可以减慢查询速度,我的意思是慢。检查这篇文章的基准和它是如何工作的解释:http ://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

于 2012-12-04T16:24:01.303 回答