私はあなたとMySQLにそれが簡単に作成し、このようにそれを分割します:
(SELECT a.fk_type_id as ID, COUNT(a.fk_type_id) as TOTAL, b.vch_name as NAME
FROM comments a
JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X AND a.fk_type_id <> 0 AND a.fk_type_id <> 4
GROUP BY a.fk_type_id)
UNION ALL
(SELECT a.fk_type_id as ID, COUNT(a.fk_type_id) as TOTAL, 'GENERAL/MISC' as NAME
FROM comments a
JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X AND (a.fk_type_id = 0 OR a.fk_type_id = 4)
GROUP BY a.fk_type_id)
我々は唯一のタイプのコメントをカウントしているので、私はJOIN
にごLEFT JOIN
を変更しました。
あなたは「MISC」タイプすることによって、fk_type_id
のインデックスを仮定して、このクエリを向上させる可能性がある「1」の代わりにタイプの「4」、あなたの代わりにa.fk_type_id <> 0 AND a.fk_type_id <> 4
のa.fk_type_id < 2
の代わりに、(a.fk_type_id = 0 OR a.fk_type_id = 4
)とa.fk_type_id > 1
ような何かを行うことができるように。
行をスキャンする代わりにインデックスを使用する場合、異なる結果を返す2つの個別のクエリを実行しても、パフォーマンスには影響しません。
これを生成するクエリは何ですか? –
結果行にexixstがない場合、TOTALは0です。 – Narek