質問

クエリで集計が行われないのに、なぜグループを個別に使用するのか、個別に使用するのですか?

また、MySQLとSQL Serverのパフォーマンスに関する個別の考慮事項に対して、誰かがグループを知っていますか? SQL Serverにはより優れたオプティマイザーがあり、同等のオプティマイザーに近いと思われますが、MySQLでは、パフォーマンスが大幅に向上することを期待しています。

dbaの回答に興味があります。

編集:

Billの投稿は興味深いですが、適用できません。もっと具体的に...

select a, b, c 
from table x
group by a, b,c

select distinct a,b,c
from table x
役に立ちましたか?

解決

MS SQL Serverからのわずかな(非常に少ない)経験的データ、DBからのいくつかのランダムテーブル。

パターンの場合:

SELECT col1, col2 FROM table GROUP BY col1, col2

and

SELECT DISTINCT col1, col2 FROM table 

クエリのカバーインデックスがない場合、どちらの方法でも次のクエリプランが作成されました。

|--Sort(DISTINCT ORDER BY:([table].[col1] ASC, [table].[col2] ASC))
   |--Clustered Index Scan(OBJECT:([db].[dbo].[table].[IX_some_index]))

およびカバーリングインデックスがあった場合、両方が生成されます:

|--Stream Aggregate(GROUP BY:([table].[col1], [table].[col2]))
   |--Index Scan(OBJECT:([db].[dbo].[table].[IX_some_index]), ORDERED FORWARD)

その非常に小さなサンプルSQL Serverからは、確かに両方が同じものとして扱われます。

他のヒント

GROUP BY は、特定の列の個別の値ごとに行のグループを1行にマップします。これらは必ずしも選択リストにある必要はありません。

SELECT b, c, d FROM table1 GROUP BY a;

このクエリは正当なSQLです(MySQLでのみ修正:。実際には標準SQLではなく、他のブランドではサポートされていません)。 MySQLはそれを受け入れ、あなたが何をしているのかを知っていることを信頼し、 b c 、および d を明確に選択します。 ' a 機能の依存関係です。

ただし、Microsoft SQL Serverやその他のブランドでは、このクエリを許可していません。機能の依存関係を簡単に判断できないためです。 編集:代わりに、標準SQLでは、単一値ルールに従う必要があります。つまり、選択リストのすべての列は、 GROUP BY 句、またはset関数の引数になります。

一方、 DISTINCT は常に、選択リスト内のすべての列を調べ、それらの列のみを調べます。 DISTINCT を使用して列を指定できるという誤解はよくあります:

SELECT DISTINCT(a), b, c FROM table1;

括弧は DISTINCT を関数呼び出しのように見せますが、そうではありません。これはクエリオプションであり、select-listの3つのフィールドのいずれかの個別の値は、クエリ結果の個別の行につながります。この選択リストの式の1つには括弧がありますが、これは結果に影響しません。

MySQLでは、多くの場合、DISTINCTよりもGROUP BYを使用した方がパフォーマンスが向上します。

" EXPLAIN SELECT DISTINCT"の実行" Using where;を示しています一時的な" MySQLは一時テーブルを作成します。

vs「EXPLAIN SELECT a、b、c from T1、T2 where T2.A = T1.A GROUP BY a」」 「使用場所」を表示するだけです;

どちらもMS SQL Serverで同じクエリプランを生成します。...MS SQL Serverを使用している場合は、実際の実行プランを有効にして、どちらがニーズに適しているかを確認できます...

これらの投稿をご覧ください:

http://blog.sqlauthority.com/2007/03/29/sql-server-difference-between-distinct-and-group-by-distinct-vs-group-by/

http://www.sqlmag.com/Article/ArticleID/24282 /sql_server_24282.html

個別の値を本当に探している場合、個別の値によりソースコードが読みやすくなります(ストアドプロシージャの一部である場合など)。アドホッククエリを作成する場合は、通常、集約することが多いため、集約がない場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top