Tôi có một bảng S với dữ liệu chuỗi thời gian như thế này:Tối ưu hóa một truy vấn SQL Vertica làm chạy tổng số
key day delta
Đối với một phím nào đó, nó có thể nhưng không chắc rằng ngày sẽ bị mất.
Tôi muốn xây dựng một cột tích lũy từ các giá trị delta (tích cực INT), với mục đích chèn dữ liệu tích lũy này vào một bảng khác. Đây là những gì tôi đã có cho đến nay:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
Trong hương vị SQL của tôi, khoản cửa sổ mặc định là khoảng từ vô biên TRƯỚC VÀ ROW HIỆN, nhưng tôi lại thấy ở đó là rõ ràng.
Truy vấn này thực sự chậm, như thứ tự độ trễ chậm hơn truy vấn bị hỏng cũ, được điền bằng 0 cho tổng tích lũy. Bất kỳ đề xuất cho các phương pháp khác để tạo ra các số tích lũy?
tôi đã nhìn vào các giải pháp ở đây: Running total by grouped records in table
RDBMS Tôi đang sử dụng là Vertica. Vertica SQL loại bỏ giải pháp subselect đầu tiên ở đó, và kế hoạch truy vấn của nó dự đoán rằng giải pháp nối ngoài bên trái thứ 2 tốn khoảng 100 lần so với dạng phân tích mà tôi đã trình bày ở trên.
Phép chiếu bạn đã xác định cho bảng này? Có bao nhiêu hàng và khóa riêng biệt? Làm thế nào chậm là "rất chậm"? –
Bạn có bao nhiêu hàng trong bảng? Bạn phân vùng/phân đoạn chiếu chính cho bảng đó như thế nào? – mtrbean
Rất khó để tôi hiểu! Bạn có thể vui lòng cung cấp dữ liệu mẫu với đầu ra được yêu cầu không? – AK47