我有一个包含一些数字列的表,并且我必须将它们保留为数字,因为大部分时间我都会从中受益。但我也需要作出关于使用部分匹配这些列的通用搜索,以便在我这里声明,我将有类似基于函数的数字列索引
...where num_col1 like "1234%...
我的问题是:
我可以做一个函数的索引上num_col1铸造该列为CHAR?我尝试过,但似乎不可能。
如果不是,你们有什么其他建议,我怎么能加快我的查询结果?
我读过一些可能的解决方案可能是要创建一个我原来的表视图,并在那里改变列类型varchar和索引该列或另一个解决方案可能是添加一个额外的varchar列到我的表和索引那。我想避免这两种解决方案,因为我有一个非常大的表,其中包含大量的行和大量的列。
在此先感谢大家, 最佳,N.
该视图不是可变的,因为我正在更新并经常在原始表中插入大量数据。并在范围内搜索,因为可以说我有一个包含12345678的列,如果用户搜索“1234”,我希望此列在我的查询结果中。 – kefer9 2011-03-25 13:43:49
我会这样做以提高速度,然后..首先,拉回最大ID以查看数字的大小。然后让SQL生成对象/脚本生成一个WHERE,它可以搜索每个范围,最大数字位数。因此,如果您的最大ID为999999,并且用户输入“1234”,则生成的WHERE子句将为:“WHERE(id> = 1234 AND id <1235)OR(id> = 12340 AND id <12350)OR(id> = 123400和id <123500)“。这需要一点逻辑,但是如果视图不可行并且性能很重要,那么在数据库上就会很容易。 – roberttdev 2011-03-25 13:47:22
@robert - 不是一个坏的方法 - 看起来有点臃肿,但可能解决了这个问题。对于正在搜索的内容的实际要求仍不清楚。它始终是开头的4位数字吗?注意'智能'键总是一个问题 - 所以我建议回到原来的桌面设计,也许首先将其分开。 – Randy 2011-03-25 13:54:02