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
-
product
có 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_code
bảng - Các chỉ mục lý tưởng có trên
product_code
cho 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.