Saya mencoba memahami dampak kinerja memilih data dari tampilan, di mana salah satu kolom dalam tampilan adalah fungsi dari data lain dalam tabel asli.
Apakah perhitungan dilakukan terlepas dari apakah kolom yang dihitung ada dalam daftar kolom yang dipilih atau tidak?
Jika saya punya meja dan tampilan dinyatakan seperti itu
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
Akankah bahwa perkalian dilakukan di query seperti di bawah?
select ticker, ddate, price, factor from prices
Apakah ada referensi yang menjamin cara ini atau yang lain? Saya membaca dokumentasi tentang sistem aturan di Postgres, tetapi saya pikir jawabannya benar-benar terletak pada optimiser, karena tidak ada dalam dokumentasi sistem aturan yang menunjukkan bahwa itu tidak akan dipilih.
Saya menduga dalam kasus di atas perhitungan tidak dilakukan. Saya mengubah pandangan ke divisi penggunaan bukan perkalian, dan memasukkan 0
untuk factor
menjadi price_data
. Kueri di atas tidak gagal, tetapi jika kueri dimodifikasi untuk memilih kolom yang dihitung kueri yang diubah gagal.
Apakah ada cara untuk memahami perhitungan apa yang sedang dilakukan ketika a select
dilakukan? Saya kira saya sedang mencari sesuatu seperti EXPLAIN
tetapi yang juga memberitahu saya tentang perhitungan yang dilakukan.