Câu trả lời tất nhiên sẽ là "nó phụ thuộc" nhưng dựa trên thử nghiệm kết thúc này ...
Giả định
- 1 triệu sản phẩm
-
productcó chỉ mục được phân nhóm trênproduct_id - Hầu hết (nếu không phải tất cả) sản phẩm có thông tin tương ứng trong
product_codebảng - Các chỉ mục lý tưởng có trên
product_codecho cả hai truy vấn.
PIVOT phiên bản lý tưởng nhất cần có chỉ mục product_code(product_id, type) INCLUDE (code) trong khi JOIN phiên bản lý tưởng nhất cần có chỉ mục product_code(type,product_id) INCLUDE (code)
Nếu những điều này xảy ra, hãy đưa ra các kế hoạch bên dưới
sau đó là JOIN phiên bản hiệu quả hơn.
Trong trường hợp type 1 và type 2 là types duy nhất trong bảng rồi đến PIVOT phiên bản hơi có lợi thế về số lần đọc vì nó không phải tìm kiếm product_code hai lần nhưng điều đó còn nhiều hơn do chi phí bổ sung của nhà điều hành tổng hợp luồng
PIVOT
Table 'product_code'. Scan count 1, logical reads 10467
Table 'product'. Scan count 1, logical reads 4750
CPU time = 3297 ms, elapsed time = 3260 ms.
THAM GIA
Table 'product_code'. Scan count 2, logical reads 10471
Table 'product'. Scan count 1, logical reads 4750
CPU time = 1906 ms, elapsed time = 1866 ms.
Nếu có thêm type các bản ghi khác với 1 và 2 JOIN phiên bản sẽ tăng lợi thế của nó vì nó chỉ hợp nhất các phần liên quan của loại type,product_id chỉ mục trong khi PIVOT gói sử dụng product_id, type và do đó sẽ phải quét qua type bổ sung các hàng xen kẽ với 1 và 2 hàng.