Vì vậy, tôi đang truy vấn một số bảng rất lớn. Lý do chúng quá lớn là vì PeopleSoft chèn các bản ghi mới mỗi lần thay đổi được thực hiện cho một số dữ liệu, thay vì cập nhật các bản ghi hiện có. Trong thực tế, các bảng giao dịch của nó cũng là một kho dữ liệu.Làm cách nào để tăng tốc truy vấn đối với bảng kho dữ liệu khổng lồ với dữ liệu có hiệu lực ngày?
Điều này đòi hỏi các truy vấn có lựa chọn lồng nhau trong chúng, để nhận hàng gần đây nhất/hiện tại. Cả hai đều có hiệu lực ngày và trong mỗi ngày (đúc một ngày) họ có thể có một trình tự hiệu quả. Do đó, để có được kỷ lục hiện tại cho user_id=123
, tôi phải làm điều này:
select * from sometable st
where st.user_id = 123
and st.effective_date = (select max(sti.effective_date)
from sometable sti where sti.user_id = st.user_id)
and st.effective_sequence = (select max(sti.effective_sequence)
from sometable sti where sti.user_id = st.user_id
and sti.effective_date = st.effective_date)
Có một số hiện tượng các chỉ số trên các bảng, và tôi không thể tìm thấy bất cứ điều gì khác mà có thể tăng tốc độ truy vấn của tôi .
Rắc rối của tôi là tôi thường muốn nhận dữ liệu về một cá nhân từ các bảng này có thể 50 user_ids, nhưng khi tôi tham gia các bảng của tôi chỉ có một vài bản ghi trong đó với một vài bảng PeopleSoft này để crap.
Bảng PeopleSoft nằm trên cơ sở dữ liệu từ xa mà tôi truy cập thông qua liên kết cơ sở dữ liệu. Truy vấn của tôi có xu hướng trông giống như sau:
select st.* from local_table lt, [email protected] st
where lt.user_id in ('123', '456', '789')
and lt.user_id = st.user_id
and st.effective_date = (select max(sti.effective_date)
from [email protected] sti where sti.user_id = st.user_id)
and st.effective_sequence = (select max(sti.effective_sequence)
from [email protected] sti where sti.user_id = st.user_id
and sti.effective_date = st.effective_date)
Mọi thứ trở nên tồi tệ hơn khi tôi phải tham gia một số bảng PeopleSoft với bảng cục bộ của mình. Hiệu suất chỉ là không thể chấp nhận được.
Tôi có thể làm gì để cải thiện hiệu suất? Tôi đã thử các gợi ý truy vấn để đảm bảo rằng bảng cục bộ của tôi được nối với đối tác của nó trong PeopleSoft trước, vì vậy nó không cố gắng nối tất cả các bảng của nó với nhau trước khi thu hẹp nó xuống đúng user_id. Tôi đã thử các gợi ý LEADING
và toyed xung quanh với gợi ý đã cố gắng để đẩy chế biến đến cơ sở dữ liệu từ xa, nhưng kế hoạch giải thích đã được che khuất và chỉ nói 'REMOTE' cho một số hoạt động và tôi không có ý tưởng những gì đang xảy ra.
Giả sử tôi không có khả năng thay đổi PeopleSoft và vị trí của các bảng của tôi, là gợi ý lựa chọn tốt nhất của tôi? Nếu tôi đang tham gia một bảng cục bộ với bốn bảng từ xa và bảng cục bộ được kết hợp với hai bảng, tôi sẽ định dạng gợi ý sao cho bảng cục bộ của tôi (rất nhỏ - thực tế, tôi chỉ có thể thực hiện chế độ xem nội tuyến để có bảng địa phương của tôi chỉ là user_ids tôi quan tâm) được tham gia đầu tiên với từng cái từ xa?
CHỈNH SỬA: Ứng dụng cần dữ liệu thời gian thực, vì vậy rất tiếc một chế độ xem được thực hiện hoặc phương pháp lưu dữ liệu bộ nhớ đệm khác sẽ không đủ.
+1, bất kỳ ai đã phải đối mặt với việc tham gia liên kết DB đều có thể đánh giá cao điều này. – DCookie
Bạn có thể đăng kế hoạch giải thích cho các truy vấn này không? – APC
Bạn có thể sử dụng chế độ xem hiện thực hóa nếu DB của bạn hỗ trợ cập nhật háo hức. –