SQL replace语句太慢

w00*_*977 2 sql sql-server

我有一个replace语句,执行以下操作:

SELECT Distinct Forenames, Surname, dbUSNs.DateOfBirth, Datasetname, 
       dbUSNs.MoPIGrade, SourceAddress, VRM, URNs 
FROM Person 
WHERE ( Replace(Replace(Replace(Replace(Replace(Replace(Replace
        (Replace(Replace(Replace(Replace(Replace(Replace(Replace
        (Replace(Replace(Replace(Replace(Replace(Replace(Replace
        (Replace(Replace(Replace(Replace
        (Surname,'/',''''),'?',''''),'',''''),'^',''''),'{',''''),'}',''''),
                '[',''''),']',''''),';',''''),'$',''''),'=',''''),'*',''''),
                '#',''''),'|',''''),'&',''''),'@',''''),'\',''''),'<',''''),
                '>',''''),'(',''''),')',''''),'+',''''),',',''''),'.',''''),
                ' ','''') LIKE 'OREILLY%')
Run Code Online (Sandbox Code Playgroud)

因此,即使OReilly被通过,也会发现O'Reilly。但是,这太慢了。有没有更好的方法来解决呢?

ang*_*son 5

问题不是不是REPLACE“太慢”,而是完全使用它会使查询的那部分无法定义,这意味着它不能使用索引。

维基百科:可精

基本上,您已从上到下强制执行tablescan / indexscan。最重要的是,您的开销为REPLACE

如果您希望此查询快速运行,则可以执行以下操作之一:

  • 创建一个附加列,其中包含姓氏的可搜索文本版本
  • 使用这些REPLACE函数创建索引的物化视图