[PHP-users 21580]Re: 全件取得時のレスポンス改善

KAMIJOU.Yasuyoshi kamijou @ assistmicro.co.jp
2004年 5月 11日 (火) 11:22:36 JST


上條と申します。

On Tue, 11 May 2004 10:34:45 +0900 (JST)
yamamoto <yamamoto @ asset-alpha.com> wrote:

> メインとなるテーブルは現在のところ、約266万件です。

 「メインとなるテーブル」と記述されているということは、検索
 対象は一時VIEWなのですね。
 となると、結合される他のテーブルのインデックス設定状態の
 チェックも必要となります。

 しかし、記述されたコードをみると、レコードセットの検索が
 2回行われているようにみえます。

> /* 最大件数を超えたらデータを取得しない */
> $nrows = OCIFetchStatement($stmt, $results);

 ここで、$resultsに検索結果のレコードセットが配列として
 格納されます。

 http://www.php.net/manual/ja/function.ocifetchstatement.php

 にて関数の再確認をしてください。

> $nrows = 0;
> while(OCIFetch($stmt)){

 ここ以下は、再度最初からFetch処理をしていて、取得したい
 レコードセット検索が2回処理されています。
 従いまして、以下は、上記の「$results」を使用するだけで
 良いのではないかと思います。

> 	/* 最大件数までデータ取得	*/
> 	if($nrows < $_SESSION["MAX_REC"]){
> 		$results["hogehoge"][$nrows]= OCIResult($stmt,"hogehoge");
> 
> 		(省略)
> 
> 	}
> 	/* 取得件数カウント	*/
> 	$nrows = $nrows + 1;
> 	/* 最大件数を超えたら終了	*/
> 	if($nrows > $_SESSION["MAX_REC"]){
> 		break;
> 	}
> }

    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
      アシストマイクロ株式会社
            システム開発部       上條 靖芳
      164-0011  東京都中野区中央5-8-1
                    朝日生命新中野ビル2F
         Tel:03-5340-1541 Fax:03-5328-1691
           mailto:kamijou @ assistmicro.co.jp
     Home Page:http://www.assistmicro.co.jp
    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



PHP-users メーリングリストの案内