SQLデータベースに対する名前の自動補完

autocomplete full-text-search scalability search sql

自動補完を行いたいテキストフィールドがWebアプリにあります。 ユーザーが「St」と入力すると、「Steve」を提案できます。 私が照合している名前は、ユーザーのSQLデータベーステーブルにあります。 私の質問は、どうすればこれを大量のユーザーに拡張できる方法で実現できるかということです。

  1. DB全文検索またはLuceneのようなものがあります。 これは、このような「開始」クエリにも適していますか?

  2. 「で始まる」タイプの検索用に通常のDBインデックスを設定する方法はありますか?

  3. 私が全く見逃している他のアイデアはありますか?

任意の助けがいただければ幸いです。 ありがとう。

  4  3


ベストアンサー

nameカラムにインデックスがある限り、これらは仕事をするべきです。

SQLサーバー:

トップ10の名前から選択してくださいどこからの名前LIKE 'St%'

MySQL(Bart Jによる)

SELECT名FROM名WHERE名LIKE 'St%' LIMIT 10

Oracle:

SELECT名FROM名からWHERE名のように 'St%' AND rownum <10

4


オートコンプリートしたいフィールドに順序付きインデックスがある場合は、「開始」スタイルのクエリで使用できます。

1


ほとんどの昇順インデックスは、LIKE ‘xxx%’タイプのクエリによる最適化に使用されます。 パフォーマンスのために、データベースから返そうとする結果の数に制限を設定することをお勧めします。

トップ10姓をtblから選択し、姓を@start '%'のように指定します。

あなたがしたいスクロールの量には限界があります。

0


SQLでそれをしないでください…?

リストを送信してブラウザでオートコンプリートします。 これが私たちのやり方です。

こうすることで、香港のクライアント – >スイスのWebサーバー – >スイスのSQLサーバーのラウンドトリップ_ユーザーキーを押す_のようなことを避けます。 私たちはページをロードするために1回の旅行をします、そしてそれはすべてクライアント側です。

自動提案制御を実行する最大のデータセットに9,000項目のようなものがあります(ほとんどははるかに少ない)

コメント後に編集:

私が言ったように、私達のリストのほとんどははるかに少ないです。 ただし、追加の200kをロードしたとしても、データベースへのラウンドトリップ(すべてのキーの押下)よりも優れています。

往復できるということは「イントラネット」を意味するため、ページの読み込み時間も関係ありません。 往復の待ち時間と比較しても、200kは何もありません…​

-1


タイトルとURLをコピーしました