- ベストアンサー
行数の取得
mysql初心者です 行数を取得したいです 処理をすこしでも軽くしたいです このように書くとテーブルの中身は見に行かないらしいのですが SELECT COUNT(*) AS cnt FROM bbs WHEREをつけると中身を見に行きますか? SELECT COUNT(*) AS cnt FROM bbs WHERE sure_id=5 中身を見に行く場合、カラムを指定したほうが早いでしょうか? SELECT COUNT(id) AS cnt FROM bbs WHERE sure_id=5 よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
・where句をつけると、当然、where内の条件を解決しないといけませんので、統計情報のみで答えを返すことが出来ません。基本的には、テーブルを見に行くことになります。ただし、where sure_id=5において、該当のテーブルのsure_id列にインデックスがついていれば、インデックススキャンのみで終わる可能性が高いです。 ・count(*)とcount(name)の間で、早い遅いはありません。が、この二つ、nullの扱いにおいて関数の意味が違うので注意してください。普通は、この意味で使い分けをします。 count関数は、基本的に、nullを数えません。 count(*)だと、全列nullの行のみが数えない対象となります。 しかし、count(name)とすると、name列がnullのデータは数えてもらえなくなります。 name列にnullが入らなければ、count(*)とcount(name)は等価ですが、nullが許されると意味が違うというです。
その他の回答 (1)
- maiko0318
- ベストアンサー率21% (1483/6969)
データベースによって違いがあるとは思いますが、 1)WHEREをつけると中身を見に行きますか? SELECT COUNT(*) AS cnt FROM bbs WHERE sure_id=5 見に行きます。見に行きたくなければインデックスにsure_idを入れれば見に行きません。 2)中身を見に行く場合、カラムを指定したほうが早いでしょうか? SELECT COUNT(id) AS cnt FROM bbs WHERE sure_id=5 変わらないと思います。
お礼
回答ありがとうございます インデックスをつける方法でやってみようと思います ありがとうございました
お礼
回答ありがとうございます インデックスを付けると速くなる理由が少し理解できました count(*)とcount(カラム名)は全然違うのですね。気をつけます