Tôi có một bảng lớn (hàng chục đến hàng trăm triệu bản ghi) mà chúng tôi đã chia vì lý do hiệu suất thành các bảng hoạt động và lưu trữ, sử dụng ánh xạ trường trực tiếp và chạy quy trình lưu trữ mỗi đêm.
Ở một số vị trí trong mã của chúng tôi, chúng tôi cần chạy các truy vấn kết hợp các bảng hoạt động và lưu trữ, hầu như luôn được lọc bởi một hoặc nhiều trường (mà rõ ràng chúng tôi đã đặt chỉ mục vào cả hai bảng). Để thuận tiện, sẽ có ý nghĩa khi có một cái nhìn như thế này:
create view vMyTable_Combined as
select * from MyTable_Active
union all
select * from MyTable_Archive
Nhưng nếu tôi chạy một truy vấn như
select * from vMyTable_Combined where IndexedField = @val
nó sẽ kết hợp mọi thứ từ Active và Store trước khi lọc @val
, điều này sẽ giết chết hiệu suất.
Có cách nào thông minh để làm cho hai truy vấn phụ của liên kết xem từng bộ lọc @val
trước khi chúng tạo liên kết không?
Hoặc có thể có một số cách tiếp cận khác mà bạn muốn đề xuất để đạt được những gì tôi sẽ làm, tức là một cách dễ dàng và hiệu quả để lấy bản ghi liên minh, được lọc bởi trường được lập chỉ mục?
EDIT: đây là kế hoạch thực hiện (và bạn có thể thấy tên bảng thực ở đây):
Thật kỳ lạ, bảng hoạt động thực sự đang sử dụng chỉ mục chính xác (cộng với tra cứu RID?) Nhưng bảng lưu trữ đang thực hiện quét bảng!