Re: Prepared statements performance
От | Pavel Stehule |
---|---|
Тема | Re: Prepared statements performance |
Дата | |
Msg-id | CAFj8pRAV8iB=Ag3bWitDBfX4CadYxYsqpqJaq=8Q6zuCM1BFRQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Prepared statements performance (Daniel McGreal <daniel.mcgreal@redbite.com>) |
Ответы |
Re: Prepared statements performance
|
Список | pgsql-general |
Hello 2012/5/10 Daniel McGreal <daniel.mcgreal@redbite.com>: > Hi again, > > I did a follow up test using 'multi-value' inserts which is three times > faster than multiple inserts thusly: > if you need speed, use a COPY statement - it should be 10x faster than INSERTS Pavel > > TRUNCATE test; > BEGIN; > INSERT INTO test (one, two, three, four, five) VALUES ('2011-01-01', true, > 'three', 4, 5.5) > > ,('2011-01-01', true, 'three', 4, 5.5) > -- 99'998 more , ('2011-01-01', true, 'three', 4, 5.5) ...; > END; > > This is the kind of speed increase I was hoping for when using prepared > statements (which makes sense because in this multi-value insert the query > is only being planned once?). > > Thanks, > Dan. > P.S. Mac OS X 10.7.3 using PostgreSQL 9.1.2. > > >> On Thu, May 10, 2012 at 9:25 AM, Daniel McGreal >> <daniel.mcgreal@redbite.com> wrote: >>> >>> Hi! >>> >>> My reading to date suggests that prepared statements should be faster to >>> execute than issuing the same statement multiple times. However, issuing >>> 100'000 INSERTs turned out to be more than ten times faster than executing >>> the same prepared statement 100'000 times when executed via pgAdmin. The >>> table was: >>> >>> CREATE TABLE test >>> ( >>> one date, >>> two boolean, >>> three character varying, >>> four integer, >>> five numeric(18,5), >>> id serial NOT NULL --note the index here >>> ) >>> >>> The prepared statement test lasting ~160 seconds was: >>> >>> TRUNCATE test; >>> >>> BEGIN; >>> PREPARE foo(date, boolean, varchar, integer, numeric(18,5)) AS >>> INSERT INTO test (one, two, three, four, five) VALUES ($1, $2, $3, >>> $4, $5); >>> >>> EXECUTE foo('2011-01-01', true, 'three', 4, 5.5); >>> -- 99'999 more executes... >>> END; >>> >>> The insertion test lasting ~12 seconds was: >>> >>> TRUNCATE test; >>> >>> BEGIN; >>> INSERT INTO test (one, two, three, four, five) VALUES ('2011-01-01', >>> true, 'three', 4, 5.5); >>> -- 99'999 more inserts... >>> END; >>> >>> I'm assuming then that I've done something mistakenly. >>> >>> Many thanks, >>> Dan. >> >> >
В списке pgsql-general по дате отправления: