[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 メーリングリストの案内