我有一个SQL数据库,我正在使用SQLAlchemy进行查询。当我按数字列过滤查询时,它会很快返回结果。例如:
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告诉数据库使用该索引?
答案 0 :(得分:0)
如果使用Webmin或其他工具在数据库中创建索引,SQLAlchemy将自动找到它。
它可能不会自动使用它,也不会使用索引,它可能不会更快。这取决于几个因素。
另请参阅:http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/