2013-07-15 18 views
5

GROUP BYコマンドの編集方法に違いはありますか?SQLの最速の 'GROUP BY'スクリプト

私のコード:

SELECT Number, Id 
    FROM Table 
    WHERE(....) 
    GROUP BY Id, Number 

は、私はこのようにそれを編集した場合より速く、それを次のとおりです。

SELECT Number, Id 
    FROM Table 
    WHERE(....) 
    GROUP BY Number , Id 

答えて

2

この例は同じです。

DDL:

CREATE TABLE dbo.[WorkOut] 
(
    [WorkOutID] [bigint] IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    [TimeSheetDate] [datetime] NOT NULL, 
    [DateOut] [datetime] NOT NULL, 
    [EmployeeID] [int] NOT NULL, 
    [IsMainWorkPlace] [bit] NOT NULL, 
    [DepartmentUID] [uniqueidentifier] NOT NULL, 
    [WorkPlaceUID] [uniqueidentifier] NULL, 
    [TeamUID] [uniqueidentifier] NULL, 
    [WorkShiftCD] [nvarchar](10) NULL, 
    [WorkHours] [real] NULL, 
    [AbsenceCode] [varchar](25) NULL, 
    [PaymentType] [char](2) NULL, 
    [CategoryID] [int] NULL 
) 

問合せ:

SELECT wo.WorkOutID, wo.TimeSheetDate 
FROM dbo.WorkOut wo 
GROUP BY wo.WorkOutID, wo.TimeSheetDate 

SELECT DISTINCT wo.WorkOutID, wo.TimeSheetDate 
FROM dbo.WorkOut wo 

SELECT wo.DateOut, wo.EmployeeID 
FROM dbo.WorkOut wo 
GROUP BY wo.DateOut, wo.EmployeeID 

SELECT DISTINCT wo.DateOut, wo.EmployeeID 
FROM dbo.WorkOut wo 

実行計画:

pp

+0

あなたの例がすべて同じであることを注意してください。しかし、重複を排除するためにgroup byを使うべきではありません。これは正しくなく、実際のテーブルに関しては異なる実行計画になる可能性があります(インデックスの使用のため) – jazzytomato

+1

マイナスは何ですか?コメントしてください。 – Devart

+0

@Thomas Haratyk、実表の実行計画を追加します。 – Devart

3

あなたがデータを集約したくない場合DISTINCTを使用することをお勧めします。それ以外の場合は、指定した2つのクエリに違いはなく、同じクエリプランが生成されます。

+0

selectコマンドの列の順序は、Group byコマンドの列の順序とは何の関係もありません。 – nionios

+0

いいえ、それは意味があります:ちょっとしたデータ、紙、鉛筆で* GROUP BY *をやってみてください:) – jazzytomato