Korzystanie z zamiany w SQL


13

Mam tabelę i muszę zaktualizować niektóre nazwiska, ale zastanawiałem się nad tym

następujące zapytania:

Czy oboje zrobią to samo?

Zapytanie 1

Update mytable
Set Name = Replace(Name,'Jeff','Joe')

Zapytanie 2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'

Odpowiedzi:


11

Nie, to nie to samo.

Pierwsze zapytanie szuka ciągu w całym ciągu (patrz replace ()Zamienia wszystkie wystąpienia określonej wartości ciągu na inną wartość. ”), Drugie szuka dokładnego ciągu.

Jeśli masz rekordy takie jak JeffJoe, pierwsze zapytanie da JoeJoe, drugie zapytanie da JeffJoe(bez żadnych modyfikacji).


25

Nie, nie zrobią tego samego.

  1. Wysiłek wymagany przez silnik SQL jest zupełnie inny. W pierwszym zapytaniu silnik musi przejść przez każdy wiersz i wykonać operację zamiany łańcucha w kolumnie Nazwa. W drugim zapytaniu przeszukuje tabelę, w której nazywa się „Jeff”, i po prostu aktualizuje kolumnę Nazwa na Joe.

  2. Zastępowanie ciągów jest znakiem wieloznacznym. W pierwszym zapytaniu nazwa „Jeffrey” zmieni się na „Joerey”.


3
Punkt 2 wydaje się ważniejszy. Jeśli to nie pomoże, wydajność nie ma znaczenia.
Martin Smith

Prawdopodobnie masz rację, ale tak naprawdę nie wiemy, jaki powinien być cel biznesowy aktualizacji. Powinienem był odwrócić kolejność analizy, ale myślę, że wspomnianie obu wad było słuszne. Jedną z myśli, które przychodzą mi na myśl, jest to, że OP uprościł nam to, ale pominęliśmy szczegóły, tak że „Nazwa” faktycznie zawiera pełne imię, a nie tylko imię.
Jonathan Fite
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.