« 2008年2月 | トップページ

2008年3月

MySQLでlimitを使用したデータ件数カウント(SQL_CALC_FOUND_ROWS)

今回はMySQLのTipsです。

Webサイトの検索画面などで、
「50件/10000件中ヒットしました。」
という画面を作る場合にとても便利なMySQL関数です。

例:

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;

mysql> SELECT FOUND_ROWS();

これだけでOK。

■1回目のSQLでは、LIMITを含むSELECT文の先頭に
「SQL_CALC_FOUND_ROWS」というオプションをつけて実行します。

これでいつも通り、特定の条件で絞り込んだ結果の先頭n件のデータが取得できます。

データ件数を取得する場合は、PHPならmysql_num_rows()でカウントできます。

 

■2回目は「SELECT FOUND_ROWS();」という関数をコールします。

これで1回目のSQLでLIMIT指定していない場合の全件数が取得できます。

通常は別途「SELECT count(*) FROM table_name」なんて再度実行する必要が
あるのですがその必要はありません。

 

よくプログラムでwhere句を変数にもっておいて、
「select a,b,c~」と「select count(*)~」の2種類のSQLにつけて
select文を2回実行するというプログラムを作っていました。

同じ条件のSQLを実行するなんて無駄だな~。と思っていたのですが
MySQLくんは用意してくれています。すごくいい子です。

 

MySQLのマニュアル
http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html

 

要するに同じ条件のSQLを2回実行する必要がないため、
超高速です。

MySQLを使用した検索画面を作っている人は、パフォーマンス改善のためにも
とても有効な関数ですので検討してみてください。

| | コメント (0)

« 2008年2月 | トップページ