Jim C. Nasby wrote:
Now, if both of these are done using a prepared statement, it's going to
look like:
SELECT * FROM queue WHERE status='?';
If the first one to run is the queue processing one, the planner will
probably choose the index. This means that when we're searching on 'N',
there will be a fairly small number of tuples read to execute the query,
but when searching for 'D' a very large number of tuples will be read.
I do not know how exactly how pg handles this internally, however while
skimming the oracle tuning pocket guide I picked up for 2 euros I
noticed that it mentioned that since oracle 9i bound parameter values
are evaluated before the execution plan is determined.
Maybe I am mixing up separate concepts (are bound variables and prepared
statements different concepts?) here. I also do not really understand if
that means that oracle does not store a query plan for a prepared query
or if it just does some special handling in case it knows that a
prepared statement column is known to have a highly varying selectivity
per value.
regards,
Lukas
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match