電子書籍の厳選無料作品が豊富!

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

よろしくお願いします

A 回答 (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が許されると意味が違うというです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/02/08 22:50

データベースによって違いがあるとは思いますが、



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

変わらないと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/02/08 22:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!