2015-04-22 19 views
11

Tôi không rõ ràng về sự khác biệt về hoạt động giữa các truy vấn được đề cập bên dưới.Vòng kết nối trong SQL Server 2008

Tôi không rõ khái niệm về OPTION(LOOP JOIN).

Cách tiếp cận thứ nhất: là kết nối truyền thống được sử dụng, đắt nhất so với tất cả bên dưới.

SELECT * 
FROM [Item Detail] a 
LEFT JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (FORCE ORDER); 

cách tiếp cận thứ 2: Nó bao gồm OPTION trong một tuyên bố với các dữ liệu được sắp xếp, chỉ đơn thuần là tối ưu.

SELECT * 
FROM [Item Detail] a 
LEFT LOOP JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (FORCE ORDER); 

3 cách tiếp cận: Ở đây, tôi không rõ ràng, làm thế nào truy vấn hoạt động và bao gồm OPTION với loop join !!?

SELECT * 
FROM [Item Detail] a 
LEFT LOOP JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (LOOP JOIN); 

Ai cũng có thể giải thích sự khác biệt và cách thức làm việc và lợi thế của từng người?

Lưu ý: Đây là không Vòng tổ hợp hoặc Hash!

+1

tài liệu: [Truy vấn gợi ý] (https://msdn.microsoft.com/en-us/library/ms181714.aspx) và [Tham gia gợi ý] (https://msdn.microsoft.com/en-GB /library/ms173815.aspx) – Tanner

+0

Tại sao bạn nghĩ rằng phương pháp 1 là "đắt nhất so với tất cả các bên dưới"? – Magnus

+0

Tôi đã thử nghiệm nó với máy chủ địa phương của tôi và có sự khác biệt cao nhất cho nó! và tất nhiên, sự khác biệt là từ +2 đến +3 giây chỉ – Vikrant

Trả lời

7

Từ Query Hints (Transact-SQL)

LỰC TỰ Chỉ định rằng thứ tự tham gia chỉ định bởi các cú pháp truy vấn được bảo tồn trong quá trình tối ưu hóa truy vấn. Sử dụng FORCE ORDER làm không ảnh hưởng đến hành vi đảo ngược vai trò có thể có của trình tối ưu hóa truy vấn.

cũng

{LOOP | MERGE | HASH} JOIN Chỉ định rằng tất cả các hoạt động nối là được thực hiện bởi LOOP JOIN, MERGE JOIN hoặc HASH JOIN trong toàn bộ truy vấn. Nếu có nhiều hơn một gợi ý kết nối được chỉ định, trình tối ưu hóa chọn chiến lược tham gia ít nhất là từ những người được phép.

Advanced Query Tuning Concepts

Nếu một tham gia đầu vào là nhỏ (ít hơn 10 dòng) và người kia tham gia đầu vào là khá lớn và lập chỉ mục trên cùng của cột, một chỉ số lồng vòng tham gia là nhanh nhất tham gia hoạt động vì chúng yêu cầu số lượng I/O tối thiểu là và ít nhất so sánh.

Nếu hai tham gia đầu vào không nhỏ nhưng được sắp xếp theo tham gia của chúng cột (ví dụ: nếu chúng được thu thập bằng cách quét các chỉ mục được sắp xếp ), thì phép nối hợp nhất là phép nối nhanh nhất.

Kết nối băm có thể xử lý hiệu quả các đầu vào lớn, chưa phân loại, không được lập chỉ mục.

Join Hints (Transact-SQL)

Tham gia gợi ý xác định rằng các truy vấn tối ưu thực thi một chiến lược tham gia giữa hai bảng

lựa chọn của bạn 1 nói với tôi ưu hoa để giữ trật tự tham gia như vậy. Vì vậy, loại JOIN có thể được quyết định bởi trình tối ưu hóa, vì vậy có thể là MERGE JOIN.

Tùy chọn 2 cho trình tối ưu hóa sử dụng LOOP JOIN cho số JOIN cụ thể này. Nếu có bất kỳ tham gia nào khác trong phần FROM, trình tối ưu hóa sẽ có thể quyết định cho chúng. Ngoài ra, bạn đang chỉ định thứ tự JOINS để lấy cho trình tối ưu hóa.

Tùy chọn cuối cùng của bạn OPTION (LOOP JOIN) sẽ thực thi LOOP JOIN trên tất cả các kết nối trong truy vấn.

Tất cả điều này đều rất hiếm khi trình tối ưu hóa chọn gói không chính xác và điều này có thể cho biết các vấn đề cơ bản lớn hơn, chẳng hạn như thống kê lỗi thời hoặc chỉ mục bị phân mảnh.

Các vấn đề liên quan