Sql Server:索引列上的较低功能

时间:2010-01-14 15:06:22

标签: sql sql-server tsql

我发现了一个大问题。

我已将Lower函数添加到其中一个表的索引列中以获取数据。 该表包含超过100K的记录。

获取记录时,cpu使用率达到100%。

我无法理解,只是因为Lower()函数才会发生这种剧烈的变化。

请帮助!

3 个答案:

答案 0 :(得分:9)

如果你真的需要这个查询,你可以做的是创建一个使用LOWER()函数的持久计算列。索引该列,您应该再次使用:

ALTER TABLE dbo.YourTableName
  ADD LowerFieldName AS LOWER(YourFieldName) PERSISTED

CREATE NONCLUSTERED INDEX IX_YourTableName_LowerFieldName
  ON dbo.YourTableName(YourFieldName)

这会在你的表中保持你的字段的小写表示,它总是最新的,并且由于它是持久的,它是你表的一部分并且不会导致LOWER()函数的惩罚。在其上放一个索引,你的搜索应该像以前一样快。

链接:

答案 1 :(得分:7)

当您在列周围添加LOWER()(或任何函数)时,将无法再使用索引(它不再具有SARG功能)。

默认情况下,SQL Server不区分大小写,因此您应该能够将其删除。

答案 2 :(得分:0)

我认为SQL Server不区分大小写,因此应删除它的Lower函数,它应该表现正常。