我有一个使用SQLAlchemy查询的SQL数据库。当我按数字列过滤查询时,它会相当快地返回结果。例如:
result = session.query(MyObject).filter(MyObject.myinteger == 1).all()请注意,这不是类的主要id,而只是许多变量中的一个。但是,当我尝试按包含10个字符的字符串的列过滤查询时,返回查询的时间至少要长一个数量级。例如,查询将如下所示:
result = session.query(MyObject).filter(MyObject.mystring == 'Q1213W3239').all()可以加快该过程的一种选择是对mystring列进行索引。然而,我不确定这是如何与SQLAlchemy交互的。我相信,如果我在数据库中创建mystring的索引,比如使用webmin (这是我用来管理数据库的方法),那么数据库将自动使用该索引进行过滤变量的查询。这是正确的吗?或者我必须以某种方式让SQLAlchemy知道索引,或者通过SQLAlchemy告诉数据库使用该索引?
发布于 2014-08-19 07:08:26
如果您使用Webmin或其他工具在数据库中创建索引,SQLAlchemy将自动找到它。
它可能不会自动使用它,即使使用了索引,它也可能不会更快。这取决于几个因素。
另请参阅:http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/
https://stackoverflow.com/questions/25372143
复制相似问题