People のテーブル (name、dob、ssn など) NewRecords
のテーブル(name、dob、ssn)どのNewRecordsがどのPeopleにも一致しない
かを判断するクエリを書きたい(フラグを設定する更新クエリ) NewRecordsテーブル内)。
具体的には、 Peopleのすべてのレコードについて、名、姓、および ssn の間のレーベンシュタイン距離が 2 より大きいNewRecordsを見つけたいと考えています。(つまり、人物の名、姓、および ssn がすべてPeopleのものと異なるため、一致しない可能性があります)。
T-SQL にユーザー定義のレーベンシュタイン関数レーベンシュタイン距離を追加し、最大許容距離の追加パラメーターを追加する最適化を既に追加しています。(計算されたレーベンスタインが許容される最大値を超えた場合、関数は早期に終了します)。ただし、テーブルが大きいため、クエリには依然として許容できないほど長い時間がかかります。
スピードアップするにはどうすればよいですか?最適化とパフォーマンスについて考え始めるにはどうすればよいですか? どの時点で SQL Server の内部を掘り下げる必要がありますか?
update NewRecords
set notmatchflag=true
from
newRecords elr
inner join People pro
on
dbo.Levenshtein_withThreshold(elr.last,pro.last,2)>2 and
dbo.Levenshtein_withThreshold(elr.first,pro.first,2)>2 and
elr.ssn is null and
elr.dob<>pro.dob