質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

2586閲覧

(MySQL)結果の数え方について。

miku

総合スコア154

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2014/08/07 12:46

MySQLで行を数えるには以下のどちらを使ったほうが早いでしょうか。

次の方法か、
SELECT COUNT(*) FROM ... WHERE ...
もしくは下記の方法で実行後に、PHPの関数で結果を数えます(例えば、mysql_num_rows())
SELECT 1 FROM ... WHERE ...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

COUNT(*)を使うとcount列にインデックスがかかるので、一番いい結果が得られるでしょう。MyISAMエンジンが列カウントを格納するので全ての列を数えようとしても数えていません。

MySQLからPHPにデータを送らなければいけないので、PHPを使って行を数えるのはあまりおすすめ出来ません。MySQLで同じことが出来るので、MySQLで数えた方がいいのではないですか。

COUNT(*)が遅いのであれば、クエリにEXPLAINを実行してインデックスが本当に使われているか、どこに追加しなければいけないか確認してください。

以下は一番早い方法ではないのですが、まれにCOUNT(*)が使えないことがあるので紹介しておきます。

ちなみに使えない時とは、結果をグループ化している時です。そのような時は、SQL_CALC_FOUND_ROWSを使って下さい。通常は行を選択し、例えばページングなどの全ての行数を知りたい時に使います。データ列を選択したら、SELECTの後にSQL_CALC_FOUND_ROWSを追加して下さい。
SELECT SQL_CALC_FOUND_ROWS ['集計したいカラム名' または*] FROM example_table LIMIT 30 OFFSET 0;
必要な列を選択した後は、以下のクエリを使って数えることができます。
SELECT FOUND_ROWS();
FOUND_ROWS()はデータ選択クエリの後すぐにコールされなければいけません。

投稿2014/08/08 02:30

funaC

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問