2010-10-11 29 views

Trả lời

23

Bạn nên sử dụng cột khớp với mục đích của những gì bạn đang tìm kiếm. Nếu bạn muốn đảm bảo rằng không có bản sao nào sử dụng UNION, nếu không hãy sử dụng UNION ALL. Chỉ vì dữ liệu của bạn sẽ tạo ra kết quả tương tự ngay bây giờ không có nghĩa là nó sẽ luôn như vậy.

Điều đó nói rằng, UNION ALL sẽ nhanh hơn trên mọi triển khai cơ sở dữ liệu sane, xem các bài viết bên dưới để biết ví dụ. Nhưng thông thường, chúng giống nhau trừ khi UNION thực hiện một bước bổ sung để loại bỏ các hàng giống nhau (như có thể mong đợi) và có thể có xu hướng thống trị thời gian thực thi.

+1

Bạn có muốn một ít xi-rô với bánh quế đó không? –

+0

Cho rằng dữ liệu được lấy từ hai bảng không liên quan có chứa GUID, tôi biết không bao giờ có nội dung trùng lặp giữa hai truy vấn. –

+3

@Mark - Nó không phải là waffling, nó trả lời hai hương vị của câu hỏi. Câu hỏi chính đặt ra là "Tôi nên sử dụng cái nào?" và câu trả lời là "sử dụng cái khớp với ý định của bạn". Câu hỏi * ngụ ý là "cái nào sẽ nhanh hơn để sử dụng?", Và câu trả lời có 'UNION ALL' –

1

Tôi sẽ sử dụng UNION ALL anyway. Mặc dù bạn biết rằng sẽ không có bản sao, tùy thuộc vào công cụ máy chủ cơ sở dữ liệu của bạn, nó có thể không biết điều đó.

Vì vậy, chỉ để cung cấp thêm thông tin cho máy chủ DB, để người lập kế hoạch truy vấn của nó có thể lựa chọn tốt hơn (có thể), hãy sử dụng UNION ALL.

Có nói rằng, nếu DB máy chủ 's truy vấn kế hoạch của bạn là thông minh đủ để suy ra rằng thông tin từ UNION khoản và bảng chỉ số, sau đó kết quả (hiệu suất và ngữ nghĩa khôn ngoan) nên được như vậy.

Hoặc là trường hợp, tùy thuộc vào máy chủ DB bạn đang sử dụng.

6

Tôi thấy rằng bạn đã gắn thẻ câu hỏi hiệu suất này, vì vậy tôi cho rằng đó là xem xét chính của bạn.

UNION ALL sẽ hoàn toàn hoạt động tốt hơn UNION vì SQL không phải kiểm tra hai bộ cho dups.

Trừ khi bạn cần SQL để thực hiện kiểm tra trùng lặp cho bạn, hãy luôn sử dụng UNION ALL.

+0

Tôi nghĩ rằng ông đã biết điều đó. Anh ấy yêu cầu cụ thể trong kịch bản mà anh ấy biết (và có thể DB cũng biết) sẽ không phải là những người bị lừa đảo. –

+1

Tôi không hiểu điểm của bạn. Bạn có hỏi, "nếu SQL có thể xác định rằng sẽ không bao giờ có chồng chéo trong hai bộ, nó sẽ tối ưu hóa' UNION' để nó không phải so sánh, làm cho nó thực hiện giống hệt với 'UNION ALL'? sử dụng 'UNION ALL' – BradC

1

Vì sẽ không có bản sao nào từ cả hai sử dụng UNION ALL. Bạn không cần phải kiểm tra các bản sao và UNION ALL sẽ làm phôi công việc hiệu quả hơn.

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