• ベストアンサー

Count(*)について

count(*)とcount(カラム名)ではどちらが動作が軽いでしょうか? スペックの悪いマシンを使用しているので、できるだけ軽い処理のほうを選びたいと思っています。 また、そもそもcount()は、普通のselectで1行読み出すより、処理は重いのでしょうか?重いとしたら、とんでもなく重いのでしょうか? よろしくお願いします。

  • MySQL
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

COUNT(*)の方が速いです。 理由は、カラムの値を見に行かないからです。 COUNT(カラム名)は、null値のチェックを行います。 普通のSELECT文が何を指すかは分かりませんが、インデックスのないカラムを使った全行を見ないといけないSELECT文より速いでしょう。

その他の回答 (2)

回答No.2

count関数で*を指定するか、列名を指定するかは、null値の扱いが変わってきます。 count関数で指定する列がインデクスを有効利用できる場合は、インデクスのみで結果を得られ、データ部へのアクセスを抑止できます。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

1) 多分ですが・・MySQL側で最適化してしまうので差はないと思います。 2) 単純なselectよりは若干応答時間はかかります。ただしselectで読み出してプログラムでカウントするよりは「トータルでは」MySQLに任せたほうが確実に速いです。

関連するQ&A

  • 二つのcount()を一文で

    Select count(COLUMN_A) from TABLE_A where USERID=1 and FLAGS=1; Select count(COLUMN_A) from TABLE_A where USERID=1 and FLAGS=2; を1つの文で取得する方法はないでしょうか?

    • ベストアンサー
    • MySQL
  • select count(*) の性能

    業務アプリケーションで次のSQL文を実行すると非常に時間がかかっています。 "select count(*) from テーブル名 where カラムA='値B'" このテーブルは200万件以上のレコードが存在していて、カラムAには索引が作成されています。DBのOPTIMIZERの処理を見ると(1)索引検索をした後で(2)対象レコードのROWIDを取得して(3)その後FETCH処理をしているのですが、(3)のFETCHの処理が非常に時間がかかっています。どうしたらこの検索を早くできるかヒントがあれば教えて下さい。私のしろうと考えでいくと、DBがどうして(3)のFETCHの処理をしているのかもわかりません。よろしくお願いします。

  • count関数の値をwhere句で使用する方法について

    宜しくお願い致します。 例えば、下記の様にデータを検索します。 select column1,count(column2) as column2_num from hoge_table group by column2_num すると、検索結果にはcolumn1のそのままの値と、column2の合計数が表示されると思います。 このcolumn2の合計数に対してwhere句で絞込みを行う方法はありませんか? asで定義した値をそのままwhere句で使用できないとの事なので、 select column1,count(column2) as column2_num from hoge_table where count(column2) = '1' group by column2_num とやってみたんですが、検索出来ませんでした。 ご存知の方、ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • COUNTの使い方

    MySQL4.0.26とPHPを使ってとあるシステムを構築しています。 AとBというテーブルがあって、それぞれのテーブルに登録してあるレコード数の合計を求めたいのですが、こういう場合はできるのでしょうか? SELECT count(*) FROM テーブルAでテーブルAのレコード数は求められますが、SELECT COUNT(*) FROM テーブルA、テーブルBとするとおかしな件数になってしまいます。 できれば一つのクエリで処理したいと思っているのですが。 初心者的質問ですいません。宜しくお願いします。

  • 複数カラムを跨いだCOUNTができない

    以下のようなDB内に顧客id(ユニーク)とhob1,hob2,hob3のようなカラムがありまして、hob1,hob2,hob3には任意で趣味を表す値が入っております。 【hoge_db】 id | hob1 | hob2 | hob3 1 | 1 | 2 | 3 2 | 2 | 3 | NULL 3 | 3 | NULL | NULL 3 | NULL | NULL | NULL ・・・ 【SELECTしたい値】 趣味1:1名 趣味2:2名 趣味3:3名 この各趣味を表す値に対する顧客数を求めたいのですが、3つのカラム全てに対してCOUNTをする方法が分かりません。。 どうかSQLにお強い方、お力を貸して頂けないでしょうか?

  • 動的SQLのCOUNTのとり方

    動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

  • MySQLにてCOUNTした値を更にCOUNT

    MySQLにてCOUNTした値を、更にCOUNTする事を1回のSQLにて実行する事は可能でしょうか? ※2回のSQL、プログラミングを介する、EXCELで再集計する等でならCOUNTのCOUNTは求められるのですが…1回のSQLでの回答お願いします。 ユーザーIDと課金額のカラムからなる、以下のようなテーブルがあるとします。 buyテーブル user_id,coin 1,100 5,100 10,200 5,200 5,200 17,100 1,100 2,200 23,500 ユーザー毎の課金回数は下記にて求められますが、 SELECT user_id,COUNT(coin) FROM buy GROUP BY id user_id,count(coin) 1,2 2,1 5,3 10,1 17,1 23,1 count(coin)毎の人数というのはどのように求めればいいでしょうか? いわば下記のような集計結果が理想です。 ※このような結果を1回のSQLにて出力するSQLをズバリ今回の例に沿って知りたいです。 count(coin),count(count(coin)) 1,4 2,1 3,1 ■環境 Apache2 MySQL5 PHP5 ご教授よろしくお願いします。

    • ベストアンサー
    • MySQL
  • JSPでのmysql操作(count)

    JSPでmysqlDriverを使用し、count文を使用する時なのですが。 grntは1か0が入っていて、複数行あります。そのgrntが1の行と0の行の数をそれぞれ数えたいのです。 SELECT grnt,count(grnt) from user group by grnt と書いてmysql上で実行すると、grntとその個数が得られるのですが、 JSP上で表示する時にgrntの1と0は表示されるのですがcountが表示されません。<c:out value="${row.count}" />という書き方では駄目なのでしょうか?。<c:out value="${row.count(grnt)}" />と書くと、 デフォルトの名前空間が指定されていない時には、関数 count はプリフィクス付きで使用しなければいけません とエラーメッセージが表示されるのですが、どうすればいいのかよくわかりません。 わかる方教えてください。宜しく御願いします。 <driver="org.gjt.mm.mysql.Driver" user="" password="" var="ds" /> <sql:query var="rs" dataSource="${ds}"> SELECT grnt,count(grnt) from user group by grnt </sql:query> <table border="1"> <tr><th>grnt</th><th>count</th></tr> <c:forEach var="row" items="${rs.rows}" varStatus="staus"> <tr> <td><c:out value="${row.grnt}" /></td> <td><c:out value="${row.count}" /></td> <tr> </c:forEach> </table>

    • ベストアンサー
    • Java
  • ACCESS SQLのINSERTについて

    TBLというテーブルにINSERT文を使用して1行レコードを追加したいです。TBLテーブルのカラムAにはシステム日付を、カラムBには別テーブルのselect count(*)の実行結果を挿入したいのですがうまくいきません。何か良い方法はございませんでしょうか? INSERT INTO カウンタ統計 ( [DATE], USER_COUNT ) VALUES (date(), (SELECT COUNT(*) FROM hiplus_HW_USER)); ※日付は問題なく挿入できるのですがSELECT文の結果が挿入できない状況です。宜しくお願いします.

  • countとdistinctを使ったSQL文ついて

    countとdistinctを使ったSQL文について VB2005+SQLSERVER2005で開発を行っています。 distinctとcountを組み合わせて抽出するようなSQL文になるのかなと思うのですが うまくいきません カラム maker:メーカ名が登録されている テーブル shohin カラムmakerの実際のデータ例 富士通 NEC 東芝 パナソニック NEC NEC パナソニック 抽出した結果の例 富士通    1 NEC     3 東芝     1 パナソニック 2 メーカー名とその件数が出力結果となります 以上ですがわかる方いらっしゃいましたらご回答お願いいたします。