こんにちは、このコードを最適化するのに助けが必要です。現在、SQL クエリを実行するのに 38 秒、ビューとしてロードするのに 23 秒かかります。背景は次のとおりです - メンバーがリンクを使用したときにテーブル レコードをリダイレクトし、どこに行ったか、いつ戻ったか、どのステータスであるかを記録します。Projects テーブルは、必要なプロジェクトごとの情報を管理します。現在、レコードがリダイレクト テーブルに追加されるたびに更新されるプロジェクトごとのカウントを保持する 3 番目のテーブルがありますが、カウントは少し信頼できない場合があります。サーバーは 1 時間ごとにクエリを実行して、カウントを修正/検証します。
sum(if(xxx,1,0)) を使用せずに列を数える良い方法はありますか?
Select projects.ID as ID,cid,name as name,state as status,
sum(if(status="complete",1,0)) as complete,cpc,
cpc*ss as mmkingaku,
cpc*sum(if(status="complete",1,0)) as total,
sum(if(status="screenout",1,0)) as screenout,
sum(if(status="quotafull",1,0)) as quotafull,
sum(if(status="short",1,0)) as short,
sum(if(status="gate",1,0)) as gate,
sum(if(status is null,1,0)) as empty,
sum(if(status="complete",1,0))/(sum(if(status="complete",1,0))+sum(if(status="screenout",1,0)))*100 as IR
from redirects,projects
where redirects.rid=projects.rid and state<>"test" group by name order by cid desc