Ah yes I'm not sure of the terminology either, i got the 'extended'
from the mysqldump usage info (mysqldump -e, on by default but you can
turn it off with mysqldump --extended-insert=false)

Anyway, from looking at the mysqldump output, extended inserts are
covered by this bit from the INSERT documentation:

"INSERT statements that use VALUES syntax can insert multiple rows. To
do this, include multiple lists of column values, each enclosed within
parentheses and separated by commas. Example:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);"

So its the difference between a single INSERT with lots of data vs a
separate INSERT for each row

The execute many thing is an option, but the relationships are a
little complex (26 tables and counting). There is only one object
added to the session, everything else is linked from there.
Implementing the inserts without the ORM might get a little involved
when it comes to ensuring the relations are established correctly, but
if that's the way to do it then so be it.

I am also open to the possibility to rejiggering my schema/session
usage to fit better with SA, which is a fairly undefined goal I know.
One thing that is very common in my program is a lot of (datetime,
float) observations. They are all mapped to different objects and all
go in different tables as they belong to different objects by the
business logic. I'm not sure if it would be better to put them in one
table and use a secondary relationship table with 2 foreign keys
mapping objects to their given date/float observations. Indeed I had
it that way originally but it has not seemed to have any impact on
performance either way.

Thanks for your reply

On Nov 2, 5:38 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
> On Nov 1, 2009, at 9:52 AM, BEES INC wrote:
>
>
>
>
>
> > Hi
>
> > Does sqlalchemy support mysql extended insert syntax?
> > I have been chasing down very slow performance. My program generates a
> > whole bunch of data then does a big SA commit() at the end, which is
> > proving to be inconveniently slow.
>
> > This is a raw import of a mysqldump without extended inserts
>
> > dbregress$ time mysql -ubees -pbees tt_test < up50ma.dbdump6
>
> > real    0m33.043s
> > user    0m1.343s
> > sys     0m1.572s
> > dbregress$
>
> > Which roughly corresponds to the time it is taking SA to do the
> > commit.
>
> > This is a raw import using extended inserts:
>
> > dbregress$ time mysql -ubees -pbees tt_test < up50ma.dbdump6.e
>
> > real    0m5.517s
> > user    0m0.081s
> > sys     0m0.024s
> > dbregress$
>
> > Which is clearly noticeably faster.
>
> > Also this is for a test dataset, the real dataset is much larger, and
> > when used the final commit can take upwards of 25 minutes.
>
> > I could not see anything in the documentation regarding this,
> > apologies if i missed something. I tried periodic commits vs a single
> > commit at the end but this did not offer any real difference in
> > performance, and also introduced other issues.
>
> you'll get much faster performance for bulk inserts if you forego the  
> usage of the ORM and use executemany() syntax which is documented here:
>
> http://www.sqlalchemy.org/docs/05/sqlexpression.html#executing-multip...
>
> I've googled and searched MySQL's site for "extended insert syntax"  
> and while there are many mentions of it, there are no definitions or  
> examples I can find.  For example the word "extended" does not appear  
> on this page in any form:  http://dev.mysql.com/doc/refman/5.0/en/insert.html
>   .
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to