• ベストアンサー

行数の取得

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 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.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が許されると意味が違うというです。

flash0
質問者

お礼

回答ありがとうございます インデックスを付けると速くなる理由が少し理解できました count(*)とcount(カラム名)は全然違うのですね。気をつけます

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

データベースによって違いがあるとは思いますが、 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 変わらないと思います。

flash0
質問者

お礼

回答ありがとうございます インデックスをつける方法でやってみようと思います ありがとうございました