SQL distinctとcountを組み合わせてデータ種類をカウントする
  • facebookページ
  • twitterページ
  • 2020.05.22

    SQL distinctとcountを組み合わせてデータ種類をカウントする

    SQLのdistinctを使ったcountについてまとめています。

    distinct countは、データの種類を数えるのに便利なSQL

    distinctとcountを組み合わせると、データの種類を数えることができます。

    以下のSQLは、部署(dept_name)ごとに役職(title)数をカウントするSQLです。distinct titleをカウントすることで、部署ごとの役職数を算出できるんですね。distinctは重複データを捨てるためのSQLです。

    なお、データベースはMySQLのサンプルデータベースEmployeesを使用しています。

    【関連記事】
    SQL distinctのサンプルコード集 group byよりも700倍速い?

    上記のSQLですが、実行に3.58秒かかっています。なお、titlesの件数は約44万件でした。

    役職数のカウントなので、titles44万件をフルスキャンするのは仕方ないですね。どこかにボトルネックがないかどうか、explainで実行計画をチェックしてみます。

    出力結果の「type」を見ると、それぞれインデックスを使っていたり単純なフルスキャンはしていないようなので妥当だと思われます。titlesはindex(フルインデックススキャン)が使用されていますが、これはしょうがないでしょう。dept_empはref、departmentsはeq_refなのはjoinを使っているため改善の余地はありません。

    テスト環境など、データの少ない段階では遅いクエリも目立たないものですが念のためexplainでボトルネックがないかどうかチェックしておきましょう。

    まとめ

    ポテパンダの一言メモ
    • distinctとcountを組み合わせるとデータの種類をカウントすることができる
    • データ種類のカウントはテーブルフルスキャンとなることが多いため、クエリに時間がかかる
    • explainによる実行計画で「type」項目を確認して、ボトルネックがないか確認する

     



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE