在一个非常大的表上对Google Cloud SQL的SQLAlchemy查询超级慢



我有一个非常大(而且还在增长)的url表,我想查询这个表来检查一个项目是否存在,并返回这个项目,这样我就可以编辑它,或者选择添加一个新项目。下面的代码可以工作,但运行速度非常非常慢,并且考虑到我需要执行的查询量(每小时数千个)会产生一些问题。我还没有找到比下面更好的解决方案。我对正在发生的事情有一个很好的感觉-它每次都加载整个表,但这里必须有一个更快的方法。

Session = sessionmaker(bind=engine)
formatted_url = "%{}%".format(url)
matching_url = None
with Session.begin() as session:
matching_url = session.query(Link.id).filter(Link.URL.like(formatted_url)).yield_per(200).first()

如果URL存在并且是最近的,则此操作非常有效,但如果URL根本不在数据库中,则该过程需要长达一分钟的时间。

您正在做select from table where Linkid like %formatted_url% limit 1;这需要对数据库进行全表扫描。如果幸运的话,该行仍在内存或缓存中。如果不存在,或者不存在,数据库将需要进行全表扫描。

如果你在云SQL上使用PostgreSQL,这个问题将帮助你解决PostgreSQL:全文搜索-如何搜索部分单词?

相关内容

  • 没有找到相关文章

最新更新