[PHP-users 26181] Re: PHP で MySQL からデータ取得時の処理速度の違いについて(まとめ)

T.Sasaki papasan2000 @ excite.co.jp
2005年 7月 15日 (金) 13:37:28 JST


佐々木です。
何か混乱させたようですいません。
(私の記述にも誤記がありますね)

SQL_CALC_FOUND_ROWS を指定すると、通常の検索処理と同時に LIMIT を除外した
検索結果(件数)も計算します。
検索自体は全レコードを対象にして行われますので、このような処理が可能です。
そして(同じ接続中)直後に FOUND_ROWS() を呼び出すと計算した値を返します。
MySQL のプログラムソースを見れば分かるんですが、FOUND_ROWS() 関数は、
直前の SQL で処理された計算値を返しているだけです。
また、上記のような理由から、SQL_CALC_FOUND_ROWS を指定した SQL については、
実際に返されるレコード数を LIMIT を用いて最小に制限した方が速くなります。
よって FOUND_ROWS() を使いたければ SQL 文は最低でも2つ発行する必要があります。

SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE 検索条件 LIMIT 開始行数-1,取得行数;
SELECT FOUND_ROWS() AS cnt;

これで最初の SQL では指定されたレコードのみが返され、
次回の SQL で検索条件に合致するレコード件数が取得できます。

尚、下記ページも参照しておいてください。
http://dev.mysql.com/doc/mysql/ja/miscellaneous-functions.html

またまた PHP とは無関係です。ご容赦ください。:-)


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