假设整数列上有一个索引id
,
如何有效地找到id
匹配的记录%789%
?
id LIKE '%789%'
将无法使用索引并且会出现性能问题。
有什么诀窍可以有效地完成这项工作吗?
假设整数列上有一个索引id
,
如何有效地找到id
匹配的记录%789%
?
id LIKE '%789%'
将无法使用索引并且会出现性能问题。
有什么诀窍可以有效地完成这项工作吗?
您可以创建一个计算列,如 convert(varchar(20), int_column) 并在其上放置一个索引。每当您想对 int_column 使用 LIKE 运算符时,您将改为对计算列执行此操作。
如果您的模式真的被打包在一起(而不是像 %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
显然,如果您知道键的范围是有界的,则可以减少比较次数。