私のアプリケーションは、入力された名前に「似ている」英語名の候補のリストを提供します。
クエリを最適化し、できるだけ早く結果を返す必要があります。結果をすばやく返すために最適なオプションはどれですか。(または、お持ちの場合は独自の提案)
A. Soundex ハッシュを生成し、それを「Names」テーブルに保存してから、次のようにします: (これにより、クエリごとにデータベース内の少なくともすべての行の soundex ハッシュを生成する手間が省けますよね?)
NameSoundex = Soundex('Ann') の名前から名前を選択
B. Difference 関数を使用する (テーブル内のすべての名前の soundex を生成する必要がありますか?)
Difference(name, 'Ann') >= 3 の名前から名前を選択
C. 簡単な比較
Soundex(name) = Soundex('Ann') の名前から名前を選択
オプションAは、1つの文字列のSoundexのみを生成し、インデックス付きの列「NameSoundex」と比較するため、結果を返すのが最も速いように思えます
オプション B はオプション A よりも多くの結果を返すはずです。名前は soundex と完全に一致する必要はありませんが、遅くなる可能性があるためです。
テーブルに何百万もの行が含まれると仮定すると、最良の結果が得られるのはどれでしょうか?