Re: Performance of a view
От | Thomas F. O'Connell |
---|---|
Тема | Re: Performance of a view |
Дата | |
Msg-id | 184A5F2E-FB68-469F-8D55-CD56D36E51E5@sitening.com обсуждение исходный текст |
Ответ на | Performance of a view (John McCawley <nospam@hardgeus.com>) |
Ответы |
Re: Performance of a view
|
Список | pgsql-general |
On Nov 14, 2005, at 7:40 PM, John McCawley wrote: > I have a view which is defined as follows: > > //------------------------- > SELECT tbl_claim.claim_id, count(tbl_invoice.invoice_id) AS count, > min(tbl_invoice.invoicedate) AS invoicedate > FROM tbl_claim > LEFT JOIN tbl_invoice ON tbl_claim.claim_id = > tbl_invoice.claim_id AND tbl_invoice.active = 1 > GROUP BY tbl_claim.claim_id; > //------------------------- <snip> > I roughly understand what is happening...in the first query, the > dataset is being knocked down to one row, then somehow the view is > being constructed using only that subset of the claim table. In > the second query, the view is being constructed from the entire > dataset which is hundreds of thousands of rows, and thus is much > slower. > > My question is how would I go about obtaining the behavior from the > faster query in the slower query? I have switched the order of the > tables, and tried many different permutations of the query, but no > matter what I do, it seems that unless I specifically hard-code a > claim_id filter on the claim_id, I am forced to run through every > record. > > Thoughts? I'd be curious to see what would happen if you added claimnum as a field in your view. I don't have a complete understanding of the postgres internals in terms of how it is able to push outer clauses down in to its views, but I think it might be able to optimize in that fashion if it is able to add a WHERE clause internally to the view, which it can't do in the case of claimnum since it doesn't exist in the view. -- Thomas F. O'Connell Database Architecture and Programming Co-Founder Sitening, LLC http://www.sitening.com/ 110 30th Avenue North, Suite 6 Nashville, TN 37203-6320 615-469-5150 615-469-5151 (fax)
В списке pgsql-general по дате отправления: