我需要开发一个查询来查找数据库中的MF001317-077944-01
,但提供的字符串(我必须使用它来搜索)没有-
。有没有办法优化MYSQL REPLACE功能?
所以我目前正在使用:
select * from sims where replace(pack, "-", "") = "MF00131707794401";
SQLAlchemy的等效:
s.query(Sims).filter(func.replace(Sims.pack, "-", "") == "MF00131707794401").all()
但花的时间过长。平均1分22秒,我需要的是1秒钟之内。
我已经考虑过使用通配符,但我不知道这是否是解决我的问题的最佳方法。
有没有办法优化replace
查询? 还是有更好的方式来实现我想要的,即操纵python中的字符串以获得MF001317-077944-01
?
哦..我还应该提到它可能不总是相同的,例如,两个不同的包装数可能是XAN002-026-001
或CK10000579-020-3
。
任何帮助将不胜感激:)
。
可惜没做,即使'pack'被索引那么它将无法用它来给定的where子句。 –
@AbhikChakraborty感谢您的回复,是否有没有另一种方式来实现这个在MySQL? – Renier
一种方法是在数据库中创建另一个列,并将所有没有'-'的字符串存储起来,在插入前您可以执行这些操作,然后查询将在该列上进行,并且从索引中获得更好的保证。 –