由于WHERE
子句
WHERE LEFT(CustomerId,3) = 'ABC'
我需要LEFT
功能,因为有其他客户ID以'BCD','CDE'或'DEF'开头,我只想在结果中使用ABC。但是,我需要快速查询,但函数正在查杀它,导致索引扫描。
我知道在Oracle中有一种方法可以创建一个基于函数的索引,所以我可以做到
CREATE INDEX IX_Customer_ID ON Customer (LEFT(CustomerId,3))
我想在SQL Server中创建类似的功能。我知道我可以使用计算列并在该列上创建索引来完成此操作。但是,我想知道是否有办法在没有计算列的情况下执行此操作?
答案 0 :(得分:4)
您无法基于SQL Server中的函数创建索引。但是,您可以在计算列上创建索引(具有限制,例如计算必须仅使用确定性函数)。
在您的特定情况下,您不必使用任何功能,只需稍微修改您的查询。
由于left(column, 3) = 'abc'
等于column like 'abc%'
,您可以安全地使用它。当模式在开头包含常量时(在这种情况下为LIKE
),SQL Server能够使用带有abc
运算符的索引。