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」が行います。クエリの速度が低下する可能性があることは既知の事実です。つまり、遅いということです。ベンチマークとその仕組みの説明については、この投稿を確認してください。

于 2012-12-04T16:24:01.303 に答える