gpt4 book ai didi

python - 有没有办法优化MYSQL REPLACE功能?

转载 作者:行者123 更新时间:2023-11-29 11:55:26 26 4
gpt4 key购买 nike

我需要开发一个查询来在数据库中查找MF001317-077944-01,但是提供的字符串(我必须使用它来搜索)没有-.

所以我目前正在使用:

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-001CK10000579-020-3.

任何帮助将不胜感激:)

最佳答案

您必须找到一种方法来避免表扫描。

几个选项:

1) 在“pack”列上创建索引,并在查询之前将“-”放入搜索字符串中。仅当您知道在搜索字符串中放置“-”的位置时才有效(例如,当它们始终位于相同位置时)。这是最简单的方法。

2) 创建一个附加列“pack_search”。用replace(pack, "-", "") 填充它。创建 INSERT OR UPDATE 触发器以在更新或插入行时更新其值。在该列上创建索引并使用该列进行查询。

3) 更好:在表上创建一个带有修改后的 pack 列的 View ,并在该 View 上创建一个索引(不知道这是否适用于 mysql,postgres 肯定可以做到)。在您的查询中使用该 View 。为了进一步加快速度,如果表的读取量远多于写入量,或者查询结果的延迟是可以接受的(例如,如果表每晚更新并且您查询在线服务),则可以具体化该 View 。

4)也许可以通过使用功能索引来完成

关于python - 有没有办法优化MYSQL REPLACE功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33278901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com