0

让我们看一个包含列 id、name 和 UCId 的表 Companies。我正在尝试查找其 UCId 的数字部分与某些数字字符串匹配的公司。

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

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

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

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

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

4

1 回答 1

2

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

于 2012-10-19T14:20:47.497 回答