質問: ### 前提・実現したいこと 価格.comにあるような、カテゴリごとの商品の件数をMysqlで実現したいと思っております しかし、単純に以下のようなSQLを発行した場合、商品数が多すぎて処理に時間がかかってしまいます。 クエリチューニングは実施しましたが、それでもパフォーマンス的に厳しいです。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/ba7109e1be8988f73b1a0de490ee0124.png) ``` SELECT count(da)ROM hogehoge group by a ``` このようなケースで速度を出したい場合、どのような設計・実装・データ構造にするのがベターでしょうか。 例えば、カウント用のテーブルを作る・NoSQLを駆使する・などなど・・・ ※MysqlでなくてもOSSなら何でも問題ございません。 皆様の教えを拝借できればと思います。
回答: 単純に以下のSQLでも遅いでしょうか? また、遅いとしてもどれくらいの時間ですか? ``` SELECT カテゴリ, count(*) as cnt FROM hogehoge group by カテゴリ ``` 上記の場合、hogehoge にカテゴリが先頭の項目で設定されているインデックスがあれば、そんなに遅く無いはずですが。 インデックスがあることが前提ですが、特定のカテゴリの製品数ということであれば条件を指定すれば若干早くはなると思います。 ``` SELECT count(*) as cnt FROM hogehoge where カテゴリ='XXX' ``` > > このようなケースで速度を出したい場合、どのような設計・実装・データ構造にするのがベターでしょうか。 > > > ご質問の情報のみだと設計についてまで言及はできないですね。 要件的な情報としてあるのは、カテゴリ別の件数を取得sるということだけですから。 (まさか価格COMのようなサイトの商品に関するテーブル設計を尋ねているとは思っていない)