0

SQL クエリでネストされた REPLACE() メソッドのパフォーマンスについて疑問に思っていました。

SELECT * 
FROM CUSTOMERS 
WHERE Replace(Replace(Replace(Replace(username, '.MR', ''), ' MR', ''), '.', ''), ' ', '') LIKE '%" & nameOnForm & "%'

私は基本的に、ユーザー名から役職 (Mr、Mrs、Dr) を取り除こうとしていますが、取り除かなければならない可能性のある役職のリストが約 40 あります。私の知る限り、ネストされた REPLACE() メソッドを使用することが、これを実現する唯一の方法です。

私の質問は、これがクエリのパフォーマンスにどのように影響するかです。ネストすればするほど、かさばって遅くなりますか? もしそうなら、速度の違いはごくわずかですか、それとも有意ですか?

これを自分で確認するためにいつでもベンチマーク テストを実行できますが、私がやろうとしていることを実行するためのより良い方法があるかどうかも疑問に思っていましたか?

4

2 に答える 2

1

一般REPLACEに、 は よりも高速ですTRANSLATE。しかし、ネストされた の場合REPLACE、確実にパフォーマンスが低下する可能性があります。それらを書き直して比較する方が安全です。また、関数ベースの indexをお勧めします。

于 2013-11-08T14:15:00.673 に答える
0

遅いのはネストされた置換関数だけではありません。テーブルに多くのレコードがある場合、この種の構造は常に遅くなります。

where function(field) = something

特定の問題について、速度が必要な場合は、弾丸を噛んで次のようにする必要があります。

where username like '%Mr.%'
or username like '%Mrs.%'
etc
于 2013-11-08T14:27:37.303 に答える