From: | Richard Huxton <dev(at)archonet(dot)com> |
---|---|
To: | Jason Lustig <lustig(at)brandeis(dot)edu> |
Cc: | pgsql-performance(at)postgresql(dot)org |
Subject: | Re: Question about SQL performance |
Date: | 2007-06-05 08:50:56 |
Message-ID: | 466523F0.5020306@archonet.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Jason Lustig wrote:
> I have some questions about the performance of certain types of SQL
> statements.
>
> What sort of speed increase is there usually with binding parameters
> (and thus preparing statements) v. straight sql with interpolated
> variables? Will Postgresql realize that the following queries are
> effectively the same (and thus re-use the query plan) or will it think
> they are different?
PG will plan "raw" sql every time you issue a query.
> SELECT * FROM mytable WHERE item = 5;
> SELECT * FROM mytable WHERE item = 10;
>
> Obviously to me or you they could use the same plan.
Except that in-between query 1 and 2 I inserted 10 million rows where
item=10. Still obvious?
> From what I
> understand (correct me if I'm wrong), if you use parameter binding -
> like "SELECT * FROM mytable WHERE item = ?" - Postgresql will know that
> the queries can re-use the query plan, but I don't know if the system
> will recognize this with above situation.
If you are using PREPARE/EXECUTE (or your client-side library is doing
it for you).
> Also, what's the difference between prepared statements (using PREPARE
> and EXECUTE) and regular functions (CREATE FUNCTION)? How do they impact
> performance?
Functions can be in any language, but if they both are in SQL and do the
same thing, no real difference.
> From what I understand there is no exact parallel to stored
> procedures (as in MS SQL or oracle, that are completely precompiled) in
> Postgresql.
You can write functions in C - that's compiled. Not sure if java
procedural code has its byte-code cached between sessions.
> At the same time, the documentation (and other sites as
> well, probably because they don't know what they're talking about when
> it comes to databases) is vague because PL/pgSQL is often said to be
> able to write stored procedures but nowhere does it say that PL/pgSQL
> programs are precompiled.
I don't see the connection.
1. You can write procedural code in pl/pgsql
2. It's not precompiled (it's "compiled" on first use)
Are you looking to solve a particular problem?
--
Richard Huxton
Archonet Ltd
From | Date | Subject | |
---|---|---|---|
Next Message | Gauri Kanekar | 2007-06-05 09:26:39 | Performance Problem |
Previous Message | PFC | 2007-06-05 05:52:12 | Re: Question about SQL performance |