[PHP-users 26177] Re: PHP で MySQL からデータ取得時の処理速度の違いについて
T.Sasaki
papasan2000 @ excite.co.jp
2005年 7月 15日 (金) 09:19:14 JST
初めまして。
佐々木と申します。
条件無しで全レコード間を移動するなら、下記の方法が一番速いと思います。
1.$max_item, $max_page の取得
SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 0,1;
SELECT COUNT(*) AS cnt FROM `table`;
$max_item = cnt の値
$max_page = $max_item / 10
$cur_page = 任意 (1〜n)
$start_row = 10 * $cur_page - 1
2.10 件のレコードを取得
SELECT * FROM table LIMIT $start_row, 10;
尚、データベースリソースの関係でテーブルサイズが
敷居値(環境次第)を超えると WHERE 句なしでは極端に遅くなるので、
そのときは WHERE 主キー > 0 など、オプティマイザがインデックス(PRIMARY)を
利用するよう SQL 文を調整する必要があるでしょう。
先頭に EXPLAIN を付加して SQL を発行するとレコードデータ転送開始前までの
処理時間も一緒に出力されるので参考になります。
とはいえ、SQL 文を調整するよりデータベースのパラメータを調整した方が
パフォーマンスが上がるケースが多いですけど・・・。
PHP と無関係のお話ですいません。:-)
PHP-users メーリングリストの案内