在SQLAlchemy中事后创建索引

0 投票
1 回答
526 浏览
提问于 2025-04-18 17:43

我有一个SQL数据库,正在用SQLAlchemy进行查询。当我通过一个数字列来过滤查询时,返回结果的速度非常快。例如:

result = session.query(MyObject).filter(MyObject.myinteger == 1).all()

需要注意的是,这个列并不是这个类的主键,只是众多变量中的一个。不过,当我尝试通过一个包含10个字符的字符串列来过滤查询时,返回结果的时间至少要长一个数量级。例如,查询可能看起来像这样:

result = session.query(MyObject).filter(MyObject.mystring == 'Q1213W3239').all()

有一个可以加快这个过程的选项,那就是给mystring列建立索引。不过,我不太确定这和SQLAlchemy是怎么互动的。我认为如果我在数据库中创建了mystring的索引,比如使用webmin(这是我用来管理数据库的工具),那么数据库会自动使用这个索引来处理过滤这个变量的查询。这样理解对吗?还是说我需要以某种方式让SQLAlchemy知道这个索引,或者通过SQLAlchemy告诉数据库使用这个索引?

1 个回答

0

如果你在数据库中创建了索引,使用Webmin或其他工具,SQLAlchemy会自动找到这个索引。

不过,它可能不会自动使用这个索引;即使使用了这个索引,查询速度也不一定会变快。这取决于很多因素。

另外,你可以参考这个链接了解更多:http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/

撰写回答