Nói chung ... nên tham gia bảng (tức là bảng kết hợp) được tạo dưới dạng Bảng tổ chức chỉ mục (Oracle), Chỉ mục được nhóm (SQL Server) .... hoặc bảng heap cũ (với chỉ mục riêng biệt trên 2 cột).Các bảng tham gia có nên được tạo ra dưới dạng các bảng có tổ chức chỉ mục (chỉ mục được nhóm) không?
Cách tôi xem liệu các ưu điểm có:
Cải thiện tốc độ. Bạn đang tránh một bảng heap tra cứu.
Cải tiến không gian. Bạn đang loại bỏ hoàn toàn bảng heap, vì vậy bạn có thể tiết kiệm ~ 30% dung lượng.
Những khó khăn:
Index Skip Scan (chỉ áp dụng cho Oracle) .. sẽ nhanh hơn sau đó một Full Bảng Scan, nhưng chậm hơn sau đó một Scan Index. Vì vậy, các tìm kiếm trên cột thứ hai của khóa phức hợp sẽ chậm hơn một chút (Oracle), chậm hơn nhiều (MSSQL).
Quét toàn bộ chỉ mục sẽ chậm hơn sau đó quét toàn bộ bảng - vì vậy nếu hầu hết thời gian Trình tối ưu hóa chi phí đang thực hiện Hash Join (không tận dụng lợi thế của chỉ mục) ... bạn có thể mong đợi hiệu suất kém hơn. (Giả sử RDBMS không lọc các bảng lần đầu tiên).
Điều này làm cho tôi đặt câu hỏi liệu có bất kỳ loại chỉ mục nào thực sự được yêu cầu cho Bảng tham gia hay không, nếu bạn chủ yếu thực hiện Hash Join.
Bạn phải có khóa chính kết hợp trên 2 cột sẽ tạo chỉ mục duy nhất trên chúng. –
reg "Quét toàn bộ chỉ mục sẽ chậm hơn sau đó quét toàn bộ bảng": Oracle cũng có INDEX FAST FULL SCAN cơ bản nhanh như truy cập bảng đầy đủ. Xem http://use-the-index-luke.com/sql/explain-plan/oracle/operations#index_fast_full_scan. Xem thêm bình luận của tôi reg. Hash Tham gia lập chỉ mục bên dưới. –
@MarkusWinand - Điểm tốt ... Cảm ơn các trang web tuyệt vời (IMO nó là dbms ngắn gọn nhất bất khả tri nguồn trên các chỉ mục trực tuyến). – vicsz