1

假设整数列上有一个索引id

如何有效地找到id匹配的记录%789%

id LIKE '%789%'将无法使用索引并且会出现性能问题。

有什么诀窍可以有效地完成这项工作吗?

4

2 回答 2

0

您可以创建一个计算列,如 convert(varchar(20), int_column) 并在其上放置一个索引。每当您想对 int_column 使用 LIKE 运算符时,您将改为对计算列执行此操作。

于 2012-04-27T01:24:56.957 回答
0

如果您的模式真的被打包在一起(而不是像 %4%5%6% 之类的东西),您可能会考虑将模式扩展为相应的整数比较。它确实会爆炸您的代码,但应该会大大加快实际搜索速度。

尝试:

mod( id, 1000 ) = 789 or
(7890 <= mod( id, 10000 ) and mod( id, 10000 ) < 7900) or 
(78900 <= mod( id, 100000 ) and mod( id, 100000 ) < 79000) or 
(789000 <= mod( id, 1000000 ) and mod( id, 1000000 ) < 790000) or 
 ...
(789000000 <= mod( id, 1000000000 ) and mod( id, 1000000000 ) < 790000000

显然,如果您知道键的范围是有界的,则可以减少比较次数。

于 2012-04-27T01:37:41.887 回答