我希望客户能够更轻松地搜索电话/手机/传真号码等内容。为了实现这一点,我想在比较它们之前删除我的数据库中的搜索值和任何非数字字符的相关列。我正在使用these functions来获取mysql中字符串的数字元素,但是当我使用它们时,它们会减慢我的查询速度。
有没有什么办法可以在不让我的跑步时间高的情况下做到这一点?
答案 0 :(得分:2)
您的查询时间爆炸的原因是因为使用此类函数会禁止您使用任何索引。由于您不直接搜索字段,而是搜索函数的输出,因此mySQL无法使用索引来执行查询。
此外,您必须计算每条记录的功能输出。
答案 1 :(得分:2)
围绕这些运行时的最佳方法是,如果您有访问权限,则可以添加一个包含您要过滤的内容的新列。添加WRITE触发器以使用剥离的值填充列,运行一个脚本,为所有记录更新字段一次。添加索引并包含新列。然后,在您的应用程序中,使用新列搜索电话号码值。缺点是表模式更改,并为业务逻辑和/或数据抽象层添加了代码。