Mysql 有没有办法在WHERE部分中使用函数进行相对快速的查询?

Mysql 有没有办法在WHERE部分中使用函数进行相对快速的查询?,mysql,Mysql,让我们看一个列id、名称和UCId为companys的表。我试图找到UCId的数字部分与某些数字字符串匹配的公司 UCID通常看起来像XY123456,但它们是用户输入,用户似乎真的喜欢在其中留下随机空间,有时甚至根本不进入XY,他们希望保持这种方式。我想说的是,我不能强制执行标准模式。他们想以自己的方式进入,并以自己的方式阅读。所以我不得不在where部分使用函数 有没有办法让这些查询在mysql中不用花很长时间?我知道要使用什么函数以及所有这些,我只需要一种方法使搜索至少相对快速。我可以用已

让我们看一个列id、名称和UCId为companys的表。我试图找到UCId的数字部分与某些数字字符串匹配的公司

UCID通常看起来像XY123456,但它们是用户输入,用户似乎真的喜欢在其中留下随机空间,有时甚至根本不进入XY,他们希望保持这种方式。我想说的是,我不能强制执行标准模式。他们想以自己的方式进入,并以自己的方式阅读。所以我不得不在where部分使用函数

有没有办法让这些查询在mysql中不用花很长时间?我知道要使用什么函数以及所有这些,我只需要一种方法使搜索至少相对快速。我可以用已经应用于UCId的函数创建自定义索引吗

仅供参考我想使用的查询示例

SELECT * 
FROM Companies 
WHERE digits_only(UCId) = 'some_digits.'

我要补充的是,companys表通常有上万行,在某些情况下需要重复运行查询,这就是为什么我需要一个快速解决方案。

不幸的是,MySQL没有基于函数(一般来说,表达式)的索引(如in或)。一种可能的解决方法是在
公司
表中添加另一列,该列实际上将由标准化值(即仅限
数字(UCId)
)填充。此列可以在您的代码中管理,也可以通过INSERT/UPDATE上设置的DB触发器进行管理。

MySQL不允许在索引中使用表达式,请参阅我的帖子:谢谢链接,它非常有用。不确定MySQL是否可以这样做,但我从其他数据库知道,您可以添加一个索引,仅表示数字(UCId)。@Bogdan,很高兴听到这很有用,在这种情况下,投票表决;)啊,星期五。在向互联网发送垃圾信息之前,我应该想到这一点,现在这显然是一个高中水平的问题。谢谢,我很可能会这样做。