Không có nghi ngờ gì rằng phiên bản 1 - tách biệt trong đó các mệnh đề trong mỗi bên của liên minh - sẽ nhanh hơn. Hãy xem tại sao phiên bản - mệnh đề where trên kết quả liên hợp - lại tệ hơn:
- khối lượng dữ liệu:sẽ luôn có nhiều hàng hơn trong kết quả hợp nhất, bởi vì có ít điều kiện hơn về những hàng được trả về. Điều này có nghĩa là nhiều I / O đĩa hơn (tùy thuộc vào chỉ mục), nhiều bộ nhớ tạm thời hơn để giữ bộ hàng, đồng nghĩa với thời gian xử lý nhiều hơn
- quét lặp lại:toàn bộ kết quả của liên hợp phải được quét lại để áp dụng điều kiện, khi nó có thể được xử lý trong lần quét đầu tiên. Điều này có nghĩa là xử lý gấp đôi bộ hàng, mặc dù có thể là trong bộ nhớ, nhưng nó vẫn là công việc bổ sung.
- chỉ mục không được sử dụng cho các mệnh đề trong đó trên kết quả hợp nhất. Nếu bạn có chỉ mục trên các trường khóa ngoại và postType, nó sẽ không được sử dụng
Nếu bạn muốn có hiệu suất tối đa, hãy sử dụng UNION ALL
, chuyển thẳng các hàng vào kết quả mà không có chi phí, thay vì UNION
, loại bỏ các bản sao (thường bằng cách sắp xếp) và có thể tốn kém và không cần thiết dựa trên nhận xét của bạn
Xác định các chỉ mục này và sử dụng phiên bản 1 để có hiệu suất tối đa:
create index t1_authorID_postType on t1(authorID, postType);
create index t1_websiteID_postType on t1(websiteID, postType);