複数選択
select count(id) from table where name='a'
select count(id) from table where name='b'
グループで1つ選択
select name,count(id) from table where name in('a','b') group by name;
どちらがいいですか?
I say the group by statement in such a simple example would perform equal or better, and probably better because if you're running two different select statements that you need to group, there is going to be a hit in performance to post process your information as well.
一般に、2 つのステートメントよりも 1 つの SQL ステートメントを準備して実行する方が適切です。
ステートメントを MySQL サーバーに送信し、MySQL サーバーがステートメントを解析し、実行計画を準備し、計画を実行してから結果セットを返すことに伴うオーバーヘッドのため、リソースの点では "より優れています"。クライアント側では、ハウスキーピングのオーバーヘッドも少しあります。
単一のリクエストに対するアプリの全体的な応答時間に大きな違いはありませんが、本当の問題は MySQL サーバーのスケーラビリティです。
一方、1 つのステートメントが 2 つの個別のステートメントよりもかなり多くのリソースを消費する場合は、2 つの個別のステートメントを実行することをお勧めします。
あなたの場合、スキーマと行の分布に関する情報がない場合、両方のカウントを取得する 1 つのステートメントが「より良い」方法である可能性が非常に高くなります。
(1 つのステートメントには、ゼロ、1、または 2 行が返される可能性があるという問題があります。一方、2 つの個別のステートメントはそれぞれ 1 行を返します。(そのため、クライアント側での結果セットの処理は少し異なります。)
GROUP
サーバーに対して1回だけ実行する必要があるため、2番目のを使用することをお勧めします。
このような状況では常に GROUP BY を使用することをお勧めします。特定の名前に使用したい場合は、個々の名前、つまり1st oneを使用してください。
ただし、すべての名前のカウントを取得したい場合は、GROUP BYを使用する必要があります。これにより、コードが簡素化され、サーバーでのパフォーマンスが低下するためです。