0

我有一个包含一些数字列的表,我必须将它们保持为数字,因为大多数时候我会从中受益。但我还需要使用部分匹配对这些列进行通用搜索,所以在我的 where 语句中我会有类似

...where num_col1 like "1234%...

我的问题是:

我可以在 num_col1 上创建一个基于函数的索引,将列转换为 CHAR 吗?我试过了,但似乎不可能。

如果没有,你们对我如何加快查询结果有任何其他建议吗?

我读到一些可能的解决方案可能是创建原始表的视图并将列类型更改为 varchar 并索引该列,或者另一种解决方案可能是向我的表中添加一个额外的 varchar 列并为其编制索引。我想避免这两种解决方案,因为我有一个非常大的表,其中已经包含大量行和大量列。

在此先感谢大家,Best,N。

4

2 回答 2

2

MySQL 没有基于函数的索引、虚拟列或索引视图 (afaik)。

引用我的SQL 索引教程中关于 MySQL 中基于函数的索引的注释:

备份解决方案是在表中创建一个包含表达式结果的真实列。该列必须由触发器或应用程序层维护——无论哪个更合适。新列可以像任何其他列一样被索引,SQL 语句必须查询新列(不带表达式)。

但是,在您的特定情况下,您可能会通过任何地方的 LIKE 表达式“%1234%”进行过滤。在这种情况下,b-tree 将无济于事(在LIKE 性能调整/索引中进行了解释)。这将需要全文索引,这仅适用于 MyISAM。

于 2011-03-25T14:00:53.217 回答
1

我认为您使用视图的直觉是正确的,以避免重复数据。但是在一种情况下通过数字优化而在另一种情况下通过字符串搜索优化的需求是什么?根据这些,查看编号系统以查看是否可以搜索比字符串比较快得多的数字范围( x >= 12340 和 x < 12350 )可能是有意义的。

于 2011-03-25T13:40:44.703 回答