2013-07-15 29 views
5

GROUP BY komutunu nasıl düzenlediğimde herhangi bir fark var mı?SQL en hızlı 'GROUP BY' komut dosyası

kodum:

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

ben böyle düzenlemeden eğer daha hızlı geçerli:

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

cevap

2

Bu örnekler eşittir.

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 
) 

Sorgu:

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 

Yürütme planı:

pp

+0

Örneklerinizin hepsinin aynı olduğunu belirtirken dikkatli olun; ama çiftleri ortadan kaldırmak için grubu kullanmamalısınız, bu doğru değildir ve gerçek tablolar (indeks kullanımı nedeniyle) söz konusu olduğunda farklı yürütme planları ile sonuçlanabilir. – jazzytomato

+1

Eksi ne için? Lütfen yorum yapın. – Devart

+0

@Tmas Haratyk, gerçek tablo için yürütme planı ekleyin. – Devart

3

o Verileri toplamak üzere istemiyorsanız DISTINCT kullanmak daha iyidir. Aksi halde, sağladığınız iki sorgu arasında fark yoktur, aynı sorgu planını üretecektir

+0

Bu yüzden, select komutundaki sütunların sırasının, Group by komutundaki sütunların sırası ile ilgisi yoktur? – nionios

+0

Hayır öyle değil, ama mantıklı geliyor: Kendinizi küçük bir veri, bir kağıt ve bir kalemle * GROUP BY * yapmaya çalışın :) – jazzytomato