2013-07-15 20 views
5

C'è qualche differenza nel modo in cui modifico il comando GROUP BY?SQL più veloce 'GROUP BY' script

il mio codice:

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

è più veloce se lo modifico in questo modo:

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

risposta

2

Questi esempi sono uguali.

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 
) 

Query:

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 

Piano di esecuzione:

pp

+0

Stai attento mentre i tuoi esempi dicono che è tutto uguale; ma non dovresti usare group by per eliminare i duplicati, questo non è corretto e potrebbe essere il risultato in piani di esecuzione diversi quando si tratta di tabelle reali (a causa dell'uso di indici) – jazzytomato

+1

Per quale meno? Per favore, commenta. – Devart

+0

@Thomas Haratyk, aggiungi il piano di esecuzione per la tabella reale. – Devart

3

è meglio usare DISTINCT se non si vuole aggregare i dati. Altrimenti, non c'è differenza tra le due query che hai fornito, produrrà lo stesso piano di query

+0

Quindi l'ordine delle colonne nel comando select non ha nulla a che fare con l'ordine delle colonne nel comando Group by? – nionios

+0

No, non è così, ma ha senso: prova a fare un * GROUP BY * te stesso con pochi dati, un foglio e una matita :) – jazzytomato