Đó là một lựa chọn đơn giản từ một bảng tạm thời, bên trái tham gia một bảng hiện có trên khóa chính của nó, với hai lựa chọn phụ sử dụng top 1 tham chiếu bảng đã tham gia.
Trong mã:
SELECT
TempTable.Col1,
TempTable.Col2,
TempTable.Col3,
JoinedTable.Col1,
JoinedTable.Col2,
(
SELECT TOP 1
ThirdTable.Col1 -- Which is ThirdTable's Primary Key
FROM
ThirdTable
WHERE
ThirdTable.SomeColumn = JoinedTable.SomeColumn
) as ThirdTableColumn1,
(
SELECT TOP 1
ThirdTable.Col1 -- Which is also ThirdTable's Primary Key
FROM
ThirdTable
WHERE
ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn
) as ThirdTableColumn2,
FROM
#TempTable as TempTable
LEFT JOIN
JoinedTable
ON (TempTable.PKColumn1 = JoinedTable.PKColumn1 AND
TempTable.PKColumn2 = JoinedTable.PKColumn2)
WHERE
JoinedTable.WhereColumn IN (1, 3)
Đây là một bản sao chính xác của truy vấn của tôi.
Nếu tôi loại bỏ hai lựa chọn phụ, nó sẽ chạy tốt và nhanh chóng. Với hai lựa chọn phụ, tôi nhận được khoảng 100 bản ghi mỗi giây, điều này cực kỳ chậm đối với truy vấn này vì nó sẽ trả về gần một triệu bản ghi.
Tôi đã kiểm tra xem mỗi bảng có Khóa chính không, tất cả đều làm. Tất cả chúng đều có Chỉ số VÀ số liệu thống kê cho các cột quan trọng của chúng, giống như các cột trong các mệnh đề WHERE và các cột trong mệnh đề THAM GIA. Bảng duy nhất không có khóa chính được xác định cũng như chỉ mục là bảng tạm thời, nhưng nó cũng không phải là vấn đề vì nó không phải là bảng liên quan đến các lựa chọn phụ chậm, và như tôi đã đề cập, không có lựa chọn phụ nào, nó chỉ chạy tốt.
Không có những cái TOP 1
đó, nó trả về nhiều hơn một kết quả và gây ra lỗi.
Giúp ai
CHỈNH SỬA :
Vì vậy, kế hoạch thực hiện cho tôi biết tôi đang thiếu một Index. Tôi đã tạo ra nó và tạo lại một số chỉ mục khác. Sau một thời gian, kế hoạch thực hiện đã sử dụng chúng và truy vấn bây giờ chạy rất nhanh. Vấn đề duy nhất là tôi không thành công khi thực hiện lại điều này trên một máy chủ khác, cho cùng một truy vấn. Vì vậy, giải pháp của tôi sẽ là HINT mà SQL Server sẽ sử dụng chỉ mục nào.