2013-07-15 33 views
5

Có sự khác biệt nào trong cách tôi chỉnh sửa lệnh GROUP BY không?Kịch bản lệnh 'GROUP BY' nhanh nhất của SQL

mã của tôi:

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

là nó nhanh hơn nếu tôi chỉnh sửa nó như thế này:

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

Trả lời

2

Ví dụ này là như nhau.

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 

kế hoạch Thực hiện:

pp

+0

Hãy cẩn thận vì các ví dụ của bạn nói rằng tất cả đều giống nhau; nhưng bạn không nên sử dụng nhóm để loại bỏ trùng lặp, điều này là không chính xác và nó có thể là kết quả trong kế hoạch thực hiện khác nhau khi nói đến bảng thực (vì sử dụng chỉ mục) – jazzytomato

+1

Đối với những gì trừ? Hãy bình luận. – Devart

+0

@Thomas Haratyk, thêm kế hoạch thực hiện cho bảng thực. – Devart

3

nó tốt hơn để sử dụng DISTINCT nếu bạn không muốn để tổng hợp dữ liệu. Nếu không, không có sự khác biệt giữa hai truy vấn bạn cung cấp, nó sẽ tạo ra cùng một kế hoạch truy vấn

+0

Vì vậy, thứ tự của các cột trong lệnh chọn không có gì để làm với thứ tự của các cột trong nhóm theo lệnh? – nionios

+0

Không, không có ý nghĩa gì: hãy cố gắng tự làm * GROUP BY * với ít dữ liệu, giấy và bút chì :) – jazzytomato