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