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

Shi*_*ant 4 sql t-sql sql-server

我发现了一个大问题.

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

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

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

请帮忙!

mar*_*c_s 9

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

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

CREATE NONCLUSTERED INDEX IX_YourTableName_LowerFieldName
  ON dbo.YourTableName(YourFieldName)
Run Code Online (Sandbox Code Playgroud)

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

链接:


Mit*_*eat 7

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

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