then it sounds like you have lazy loading happening, check echo=True
On Sep 11, 2014, at 3:12 PM, tatütata Okay <rogersher...@googlemail.com> wrote: > Okay will try it. Maybe you got it wrong. I have only 5 k rows > > On Thu, Sep 11, 2014 at 8:55 PM, Michael Bayer <mike...@zzzcomputing.com> > wrote: > three joins over 100K rows is going to be very slow, two seconds seems in the > ballpark. EXPLAIN will show if there are any table scans taking place. > > as far as why the relationship is faster, it might be doing something > different, check the echo=True output. > > On Sep 11, 2014, at 2:35 PM, tatütata Okay <rogersher...@googlemail.com> > wrote: > >> Yeah that would have been my next steps. I hoped more for some hints if the >> setup is correct more if there are issues with the relationship >> configuration? I think speed related things come up when there are over >> 100000 entries and more? We speak here about 5000, thats why I think I did a >> mistake on the configuration of the relation patterns? >> >> >> On Thu, Sep 11, 2014 at 8:12 PM, Michael Bayer <mike...@zzzcomputing.com> >> wrote: >> for some tips on isolating where the speed issue is, follow the steps at: >> http://docs.sqlalchemy.org/en/latest/faq.html#how-can-i-profile-a-sqlalchemy-powered-application >> >> for too many joins, you also want to look into EXPLAIN PLAN. >> >> >> >> On Sep 11, 2014, at 12:57 PM, tatütata Okay <rogersher...@googlemail.com> >> wrote: >> >>> Hey, >>> I got some shop tables like: >>> customerorders, itemsbought, products whole query with three joins takes >>> nothing on command line sql. When I trying to achieve same thing with ORM >>> and my relationship it takes 1 second, joining all three 3 tables 2 seconds? >>> >>> May I come first up with my table and mapper definitions: >>> >>> class Products(Base): >>> __tablename__ = 'products' >>> id = Column(Integer, primary_key=True) >>> productname = Column(Unicode(255)) >>> productname_en =Column(Unicode(255), default = u'nice product') >>> path = Column(Unicode(300)) >>> pic = Column(Unicode(300), unique=True) >>> bigpic = Column(Unicode(300), unique=True) >>> sold = Column(Boolean) >>> price = Column(Integer) >>> locked = Column(Boolean) >>> sort = Column(Integer) >>> catid = Column(Integer) >>> sizeid = Column(Integer, ForeignKey('productsizes.sizeid')) >>> productsizes = relationship("ProductSizes", backref="products", >>> lazy='joined') >>> itemsbought = relationship("Itemsbought", backref="products") >>> >>> def __init__(self, productname, path, pic, bigpic, sold, price, >>> sizeid, locked, sort, catid): >>> self.productname = productname >>> self.path = path >>> self.pic = pic >>> self.bigpic = bigpic >>> self.sold = sold >>> self.price = price >>> self.sizeid = sizeid >>> self.locked = locked >>> self.sort = sort >>> self.catid = catid >>> >>> class Customerorder(Base): >>> __tablename__ = 'customerorders' >>> id = Column(Integer, primary_key=True) >>> ip = Column(Unicode(40)) >>> comment = Column(Unicode(1000)) >>> plz = Column(Unicode(30)) >>> name = Column(Unicode(100)) >>> street = Column(Unicode(200)) >>> ort = Column(Unicode(100)) >>> date = Column(DateTime, default = func.now()) >>> money_received = Column(Boolean) >>> shipped = Column(Boolean) >>> >>> def __init__(self, comment, ip, street, plz, ort, name, money_received): >>> self.ip = ip >>> self.customerid = customerid >>> self.comment = comment >>> self.street = street >>> self.plz = plz >>> self.ort = ort >>> self.name = name >>> self.money_received = money_received >>> self.shipped = shipped >>> >>> class Itemsbought(Base): >>> __tablename__ = 'itemsbought' >>> id = Column(Integer, primary_key=True) >>> orderid = Column(Integer, ForeignKey('customerorders.id')) >>> order = relationship('Customerorder', backref=backref("itemsbought")) >>> productid = Column(Integer, default = 0) >>> >>> def __init__(self, productid, orderid): >>> self.productid = productid >>> self.orderid = orderid >>> >>> >>> I try to query only Customerorder and Itemsbought without having those >>> relations to products: >>> customerorders = sqlsession.query(Customerorder)\ >>> .join(Itemsbought.order)\ >>> .all() >>> or with joinedload, outerjoins all the same thing. log shows me always >>> sqlalchemy makes left outer joins. >>> Trying to use this data in loop ends up in 1700 queries: >>> >>> for order in customerorders: >>> print order.name, >>> for item in order.itemsbought: >>> print item.productid >>> >>> I managed to get all this correct data with sizes and products in 2,5 s >>> with joinedload but this is a way too long for 5 k entries in itemsbought >>> and 1680 orders. >>> >>> Can someone point to what I am doin wrong? And whats the best way to get >>> all orders in an clearly arranged way with products, price, sizes etc. >>> >>> Cheers >>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sqlalchemy" group. >>> To unsubscribe from this group and stop receiving emails from it, send an >>> email to sqlalchemy+unsubscr...@googlegroups.com. >>> To post to this group, send email to sqlalchemy@googlegroups.com. >>> Visit this group at http://groups.google.com/group/sqlalchemy. >>> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at http://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at http://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.