2013-07-15 19 views
5

Czy są jakieś różnice w sposobie edycji polecenia GROUP BY?Najszybszy kod SQL "GROUP BY"

mój kod:

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

jest to szybciej, jeśli mogę edytować to tak:

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

Odpowiedz

2

Te przykłady są takie same.

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 
) 

Zapytanie:

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 

Plan Wykonanie:

pp

+0

Bądź ostrożny, ponieważ twoje przykłady mówią, że wszystko jest takie samo; ale nie powinieneś używać grupy przez eliminowanie duplikatów, to nie jest poprawne i może skutkować różnymi planami wykonania, jeśli chodzi o prawdziwe tabele (z powodu użycia indeksów) – jazzytomato

+1

Za co minus? Proszę skomentuj. – Devart

+0

@Thomas Haratyk, dodaj plan wykonania dla prawdziwego stołu. – Devart

3

lepiej wykorzystywać DISTINCT jeśli nie chcesz agregować dane. W przeciwnym razie nie ma różnicy między dwoma podanymi przez Ciebie zapytaniami, wygeneruje to ten sam plan zapytania:

+0

Czy kolejność kolumn w poleceniu select nie ma nic wspólnego z kolejnością kolumn w grupie według polecenia? – nionios

+0

Nie, nie ma, ale ma sens: spróbuj zrobić * GRUPA BY * siebie z małymi danymi, papierem i ołówkiem :) – jazzytomato