Tôi đang cố gắng hiểu tác động hiệu suất của việc chọn dữ liệu từ chế độ xem, trong đó một trong các cột trong chế độ xem là chức năng của dữ liệu khác trong bảng gốc.
Việc tính toán có được thực hiện bất kể liệu cột được tính có trong danh sách các cột được chọn hay không?
Nếu tôi có một bảng và khung nhìn được tuyên bố như vậy
CREATE TABLE price_data (
ticker text, -- Ticker of the stock
ddate date, -- Date for this price
price float8, -- Closing price on this date
factor float8 -- Factor to convert this price to USD
);
CREATE VIEW prices AS
SELECT ticker,
ddate,
price,
factor,
price * factor as price_usd
FROM price_data
Would rằng nhân được thực hiện trong một truy vấn như hình dưới đây?
select ticker, ddate, price, factor from prices
Có một tài liệu tham khảo đảm bảo cách này hay cách khác? Tôi đã đọc tài liệu về hệ thống quy tắc trong Postgres, nhưng tôi nghĩ câu trả lời thực sự nằm ở trình tối ưu hóa, vì không có gì trong tài liệu hệ thống quy tắc chỉ ra rằng nó sẽ không được chọn.
Tôi nghi ngờ trong trường hợp trên, việc tính toán không được thực hiện. Tôi đã thay đổi quan điểm để phân chia sử dụng thay vì nhân, và chèn một 0
cho factor
vào price_data
. Truy vấn trên không thất bại, nhưng nếu truy vấn được sửa đổi để chọn cột được tính thì truy vấn đã sửa đổi không thành công.
Có cách nào để hiểu những tính toán nào đang được thực hiện khi select
thực hiện không? Tôi đoán tôi đang tìm kiếm một cái gì đó giống như EXPLAIN
nhưng nó cũng cho tôi biết về (các) tính toán đang được thực hiện.