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

yamamoto yamamoto @ asset-alpha.com
2004年 5月 11日 (火) 10:34:45 JST


山本です。
きしださん、鶴田さん、上條さんおはようございます。

> セッションを使うのではなく、すなおに、取得件数分だけ取得するようにしたほ
> うがいいのではないでしょうか。
検索した結果を他画面でも使用するので、セッションを使うようにしました。

>  何故、セッション配列に格納後に再ソートしているのでしょうか?
>  単純に、SQL文の「ORDER BY」句を使用する方がレスポンスも良く
>  なるのではないでしょうか?
再ソートは、一度一覧表示したものについて、再検索せずにユーザが並び順を
変更可能なように出来るようにしたものです。

また、最初の検索時にもSQLのORDER BYを使用せずにPHPのソートを
を行っています。理由はPHPでソートを行ったほうが速かったからです。

>一度、該当テーブルのインデックス設定状態を確認してみては
>如何でしょうか?
必要なインデックスは設定しております。
メインとなるテーブルは現在のところ、約266万件です。

> whileループの中で、毎回取得件数をoci_num_rowsとかで見てたり
> すると遅くなるかも。(PEAR DB使った場合の経験なのでPEAR特有
> の動きかもしれませんが。)
コードは以下のようにしています。

/* 最大件数を超えたらデータを取得しない */
$nrows = OCIFetchStatement($stmt, $results);
$nrows = 0;
while(OCIFetch($stmt)){
	/* 最大件数までデータ取得	*/
	if($nrows < $_SESSION["MAX_REC"]){
		$results["hogehoge"][$nrows]= OCIResult($stmt,"hogehoge");

		(省略)

	}
	/* 取得件数カウント	*/
	$nrows = $nrows + 1;
	/* 最大件数を超えたら終了	*/
	if($nrows > $_SESSION["MAX_REC"]){
		break;
	}
}

よろしくお願いします
-- 
yamamoto <yamamoto @ asset-alpha.com>




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