我发现了一个大问题。
我已将Lower函数添加到其中一个表的索引列中以获取数据。 该表包含超过100K的记录。
获取记录时,cpu使用率达到100%。
我无法理解,只是因为Lower()函数才会发生这种剧烈的变化。
请帮助!
答案 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函数,它应该表现正常。