CakePHP Paginateが遅い

PHP

CakePHP Paginateが遅い

CakePHP 1.3.6

CakePHPの難点は、動作が遅いことです。機能が豊富な分、仕方ないかもしれませんが。

調べてみると、Paginateの処理でも若干時間がかかっているようなので、これをカスタムして早くする方法です。

デフォルトのまま利用すると、まず件数を取得するために、Paginateは関連するテーブルのすべてのデータを取ってきて、カウントします。
しかし、アプリの作りから、これが不要な場合もありますよね。

そういう場合は、モデルに次のように書き込みましょう。

 //Studentモデルのファイル student.php
 function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
 
         	$sql="SELECT DISTINCT student_id FROM students";
         	$results=$this->query($sql);
         	$number=count($results);
             return $number;
             
         } 
 

returnで戻す値が整数になるように気をつけましょう。

すると、全件の件数はこれで数えるようになるので、少しだけ速度が速くなります。
私の場合は、10万件のデータを関連テーブルなど含めてカウントしていたので164msかかっていたのが、14msに縮められました。

CakePHP公式マニュアル 4.9.4 カスタムしたクエリによるページ付け

下記には、recursiveを-1に設定することで、早くしようという例も載っています。

http://cakephp.1045679.n5.nabble.com/pagination-SELECT-COUNT-query-slow-td3321847.html

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です