使用LIKE在哪里缓慢更新

时间:2013-11-14 15:48:23

标签: sql tsql sql-server-2008-r2 sql-update

我应该在几列上的两个表上做几次更新。表格大约是100万行。我必须在3个不同的服务器上进行更改。更新很简单,只需删除子字符串即可。子字符串长约200个字符,列为VARCHAR(MAX)。此更改将影响大约三分之一的行。这是查询:

DECLARE @myVar varchar(250) = 'blablabla2345f25wdf34gqefblablabla...blablablabla'
UPDATE myTable
    SET myCol = REPLACE(myCol, @myVar, '')
WHERE myCol LIKE '%' + @myVar + '%'

问题是我开始使用一个表并且正在执行loooong,我在10分钟后停止执行。第一台服务器只是测试/沙盒服务器,但其他服务器是预生产和生产。有关如何加快查询的任何建议吗?

2 个答案:

答案 0 :(得分:3)

它缓慢的原因是因为你的WHERE语句没有命中任何索引。就像字符串以通配符开头时不能使用索引一样。根据服务器的不同,如果您的搜索字词为“someterm%”

,则可以使用索引

有没有办法可以修复你的查询,以便有一个索引供它查找?

答案 1 :(得分:2)

三个原因(至少):

  1. 您正在过滤未编制索引的列表达式,因此需要进行表扫描
  2. 您正在VARCHAR(MAX)列中搜索,该列可能存储在与主表数据不同的页面中,因此需要额外的I / O(加上字符串比较的额外开销)
  3. 您正在修改 VARCHAR(MAX)数据,因此需要重新组织数据 以适应新的空间,从而导致额外的I / O.
  4. 除非您可以过滤其他字段,否则我无法想到加快速度的方法。批量运行将减少事务日志开销量,并显示增量进度,至少感觉就像它变得更快。

相关问题