Chúng tôi có cơ sở dữ liệu lớn này (> 1TB) mà chúng tôi dự định "thu nhỏ". Cơ sở dữ liệu xoay quanh một thực thể chính, hãy gọi nó là "Truy cập". Để thảo luận, hãy nói rằng nó là một cơ sở dữ liệu cho một thực hành y tế.
Có tổng cộng 30 "loại" truy cập, chẳng hạn như thủ tục, hàng năm, theo dõi, tiêm chủng, v.v., mỗi loại là một bảng trợ cấp để "Truy cập", ví dụ: "visit_immuno".
Cơ sở dữ liệu đã tích lũy được khoảng 12 năm dữ liệu kể từ năm 2000. Ai đó đã đề xuất rằng chúng tôi giữ khoảng 3 năm dữ liệu trong phiên bản "trực tiếp" và phần còn lại sống trong cơ sở dữ liệu "old_data". Ngày CHỈ được lưu trong bảng "Truy cập" vì nó được chuẩn hóa. Bảng Visit cũng chứa một ROWVERSION
cột và cột BIGINT
giả danh tính (cụm). Đối với tất cả ý định và mục đích, giả sử khóa phân cụm được điền bởi SEQUENCE (SQL Server 2012 Enterprise) - chúng ta sẽ đặt tên cho nó cid
.
Các visit.date
không phải lúc nào cũng theo thứ tự như phím clustering, ví dụ như khi một bác sĩ tiếp tục thăm viếng kéo dài và trở lại với "cặp" của mình dữ liệu, nó được sáp nhập vào bảng chính. Ngoài ra còn có một số cập nhật cho bảng "truy cập" sẽ khiến ROWVERSION
cột không đồng bộ với cả cột cid
và date
cột - nói một cách đơn giản, không phải ROWVERSION
cũng không cid
tạo ra các khóa phân vùng phù hợp vì lý do này.
Quy tắc kinh doanh để xóa dữ liệu khỏi "trực tiếp" là visit.date
phải lớn hơn 36 tháng vàvisit_payment
phải có hồ sơ con . Ngoài ra, cơ sở dữ liệu "old_data" không chứa bất kỳ bảng cơ sở nào ngoại trừ visit%
.
Vì vậy, chúng tôi kết thúc với:
Live DB (sử dụng hàng ngày) - Tất cả các bảng DB dữ liệu cũ - dữ liệu cũ hơn cho các visit%
bảng
Đề xuất yêu cầu DB kết hợp là một vỏ chứa Từ đồng nghĩa với TẤT CẢ các bảng cơ sở trong Live DB
(ngoại trừ visit%
) cộng với Chế độ xem UNION ALL trên các visit%
bảng trong hai cơ sở dữ liệu.
Giả sử các chỉ mục tương tự được tạo trong Old-Data
DB, các truy vấn sẽ hoạt động tốt trên Chế độ xem UNION-ALL ? Kiểu mẫu truy vấn nào có thể vượt qua kế hoạch thực hiện cho Chế độ xem UNION-ALL ?