SQLite3和SQLAlchemy中的高效关系过滤器

时间:2018-03-05 00:48:08

标签: python sql sqlite sqlalchemy

TLDR :如何针对空关系字段加快查询速度?

更新:这是SQLAlchemy使用的SQL。有谁知道为什么LIMIT ? OFFSET ?存在?

SELECT addresses.id, addresses.street, addresses.city, addresses.state, addresses.zipcode, addresses.parcel 
FROM addresses 
WHERE NOT (EXISTS (SELECT 1 
FROM results 
WHERE addresses.id = results.address_id))
 LIMIT ? OFFSET ?

我在SQLite3数据库上执行的一些查询非常缓慢。我很惊讶,因为我只有大约90,000个结果实例。这里有一些对象信息:

class Address(Base):  # There are 1.45M addresses
    ...
    results = relationship("Result", back_populates="address")

class Result(Base):  # There are 90k results
    ...
    address_id = Column(Integer, ForeignKey('addresses.id'))
    address = relationship("Address", back_populates="results")

此查询需要25分钟!!

q = session.query(Address)
addresses = [
              [row.street, row.zipcode, row.id] for row in
               q.filter(Address.results == None).limit(350).all()
            ]

这是索引问题吗?即使没有索引,我觉得limit子句应该比事情更快。

0 个答案:

没有答案