From: | 高健 <luckyjackgao(at)gmail(dot)com> |
---|---|
To: | pgsql-general <pgsql-general(at)postgresql(dot)org> |
Subject: | I want to make an example of using parameterized path |
Date: | 2013-06-18 09:09:05 |
Message-ID: | CAL454F0W4RdUgvcGj=XzsOH7BN+AQx+--DBGK36tUrpVNeQczA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hello:
I have some questions about parameterized path.
I have heard that it is a new feature in PG9.2.
I digged for information of parameterized path, but found few(maybe my
method is not right).
My FIRST question is:
What is "parameterized path " for?
Is the following a correct example of activating "parameterized path" being
created?
I found an example by googling. I tried it:
--making data:
postgres=# create table tst01(id integer);
CREATE TABLE
postgres=#
postgres=# insert into tst01 values(generate_series(1,100000));
INSERT 0 100000
postgres=#
postgres=# create index idx_tst01_id on tst01(id);
CREATE INDEX
postgres=#
--runing:
postgres=# prepare s(int) as select * from tst01 t where id < $1;
PREPARE
postgres=# explain execute s(2);
QUERY PLAN
---------------------------------------------------------------------------------
Index Only Scan using idx_tst01_id on tst01 t (cost=0.00..8.38 rows=1 width=4)
Index Cond: (id < 2)
(2 rows)
postgres=# explain execute s(100000);
QUERY PLAN
---------------------------------------------------------------
Seq Scan on tst01 t (cost=0.00..1693.00 rows=100000 width=4)
Filter: (id < 100000)
(2 rows)
postgres=#
When I just send sql of " select * from tst01 t where id <2" , it will
also produce index only scan plan.
When I just send sql of " select * from tst01 t where id < 100000", it
will also produce seq scan plan.
So I think that the above example can not show that "parameterized path"
has been created.
Maybe:
"parameterized path" is special method to do something for a parse tree's
plan in ahead I think,
In order to improve prepared statement's planning and executing speed
more.
Is this understanding right?
My SECOND question is:
For the above example I used,
I found that as if "parameterized path" is not created.
For my above example,
I can find calling relationship of the following:
PostgresMainàexec_simple_queryàpg_plan_queriesàpg_plan_queryàplannerà
standard_plannerà
àsubquery_planneràgrouping_planneràquery_planneràmake_one_relà
set_base_rel_pathlistsà
àset_rel_pathlistàset_plain_rel_pathlist
The set_plain_rel_pathlist calls create_seqscan_path via add_path
function's parameter.
Then In create_seqscan_path function , get_baserel_parampathlist function
returned null.
As following:
pathnode->param_info = get_baserel_parampathinfo(root, rel,required_outer);
So I got no param_info . Does that mean : parameteried path is not
created ?
If so, Is there any option to let the parameterized path being created? And
how to observe it?
Thanks!
From | Date | Subject | |
---|---|---|---|
Next Message | Arun P.L | 2013-06-18 12:38:06 | Type cast errors in version 9.2 while upgrade |
Previous Message | 高健 | 2013-06-18 09:01:51 | Re: JDBC prepared statement is not treated as prepared statement |