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

时间:2012-10-19 14:16:16

标签: mysql

让我们来看一个表列有id,name和UCId的公司。我正在尝试找到UCId的数字部分匹配某些数字字符串的公司。

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

有没有办法让这些查询在mysql中不占用太长时间?我知道要使用哪些功能以及所有这些,我只需要一种方法来至少相对快速地进行搜索。我可以以某种方式使用已经应用于UCId的函数创建自定义索引吗?

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

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

我只想补充一点,公司表通常有数万行,在某些情况下,查询需要重复运行,这就是我需要快速解决方案的原因。

1 个答案:

答案 0 :(得分:2)

不幸的是,MySQL没有基于函数(通常是基于表达式)的索引(如OraclePostgreSQL)。一种可能的解决方法是向Companies表添加另一列,该列实际上将由标准化值(即digits_only(UCId))填充。可以在代码中或通过在INSERT / UPDATE上设置的数据库触发器来管理此列。