テーブルグループがあり、その下には多くのフィールドがあります
ID
ユーザー
コスト
タイプ
addtime
uptime
note
.....
type には 5 つのタイプがあります、つまり 001-005、
私が欲しいもの結果は、過去 6 か月間の 001-005 の合計数をクエリします。
たとえば、1 月 1 日から 31 日までのデータをクエリします。TYPE は 001-005 です
select count(*) from groups where type=' 001' および addtimefa5c87cec7df187558e986b99fd5226a= '20130330' のグループから
type='004' および addtime452f85ba0cd27d8ca8f57aa25d2442f9= '20130530'
6 か月間クエリを実行する場合、30 回クエリを実行する必要があります。
このシステムにログインしている人が多い場合、このような SQL のクエリは非常に時間がかかります。3 人が同時にこのページを開いた場合の応答時間は約 3 秒以上になるかどうかを試してみました。これらのクエリ結果をテーブルに書き込む方法があります。クエリを実行するときに、テーブルのデータを直接クエリし、これらの SQL データが自動的に結果をクエリしてテーブルに更新する時間を設定できます。この方法では、count クエリを使用するよりもテーブルから直接データをクエリする方が高速ですが、これをどのように実装すればよいでしょうか? 私が現在使用しているのは、1 つずつクエリを実行する最も愚かな
メソッドであり、非常に行き詰まっています。
ディスカッションに返信 (解決策)
こんにちは、ご返信ありがとうございます。この方法では、クエリは合計値になります
たとえば、1 月の TYPE =001 の場合、合計は 20 になります。 1 月の合計は 500 です
TYPE =003 1 月の合計は 3987 です
TYPE=004 1 月の合計は 9898 です
TYPE=005 1 月の合計は 123 です
select count(*) from groups where addtime>='20130101' and addtime <= '20130630' group by addtime,type
そうすれば、group by type、DATE_FORMAT(addtime,'m%') も必要ありません これを試してください
select count(*) from groups where addtime>='20130101' and addtime <= '20130630' group by MONTH(addtime),type
select count(*) from groups where addtime>='20130101' and addtime <= '20130630' group by substring(addtime,4,2),type
2 つの方法:
1. SQL を使用して一時テーブルを作成します
2. where 条件に関連するインデックスを作成します
一時テーブルは良い選択であり、データが処理された後に自動的に解放されます。
書き方を自分で勉強してください
クエリを減らすためにキャッシュを使用することは実際には不可能です...