- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要开发一个查询来在数据库中查找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-001
或CK10000579-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/
我是一名优秀的程序员,十分优秀!