2009-05-12 26 views
0

私は、100万レコードを持つSQL Server 2005データベースに米国の都市/州リストテーブルを持っています。私のWebアプリケーションページにAJAXオートコンプリート機能を使用する場所のテキストボックスがあります。ユーザーが3文字で入力すると、完全な都市/州を表示する必要があります。 例: 入力ボス.. 出力:Boston、MAAJAXオートコンプリートのパフォーマンスを改善する

現在のところ、この機能はかなり遅いです。どうすれば改善できますか?

読んでいただきありがとうございます。

答えて

2

データベースのインデックスをチェックインしましたか?クエリが正しくフォーマットされていて、テーブルに適切なインデックスがある場合、500万行のデータベースにクエリを実行し、1秒未満で結果を得ることができます。あなたが市にインデックスを持っていて、インデックスに列の状態が追加されているかどうかを確認することをお勧めします。都市別にクエリすると、インデックスから都市と州の両方が返されます。

SQL管理スタジオでクエリを実行し、ctrl-mを押すと、クエリの実行計画が表示されます。あなたがテーブルスキャンやインデックススキャンのようなものを見ると、あなたのテーブルに間違ったインデックスがあります。検索結果にインデックスシークがあることを確認したい場合は、クエリがデータベース内の適切なページを通過してデータを見つけることを意味します。

これが役に立ちます。

0

私が推測している問題は、データベース自体ではなく(インデックスの問題をチェックする必要がありますが)、データベースから情報を取得するのにかかる時間です適切なオブジェクトなどを作成し、ブラウザに送信します。この場合、いくつかの実際の作業がなければ多くのオプションはありません。

  1. 頻繁にアクセスされる情報をWebサーバーにキャッシュできます。頻繁にアクセスされる都市がたくさんあることが分かっている場合は、それらを最前面に保管し、ユーザーが探しているものがシステムにない場合はデータベースをチェックすることができます。ユーザーが何かを入力していて、それをリスト内で見つける必要があるときは、情報を格納するのにprefix treesを使用します。

  2. ユーザーが入力を開始するとすぐにデータベースから情報をプルすることができます。その後、ユーザーから詳細情報を取得した後、完全な結果セットをペアダウンすることができます。リクエスト間で情報をメモリに保存する必要があるので、これはちょっと面倒です(ユーザーが "B"を入力すると、検索を開始してセッションに保存します)。初期クエリの結果セットは一時的にメモリに格納され、最終リクエストに一致するサブセットをループスルーしてプルすることができます)。

-1

使用した親の子ドロップダウン

+0

申し訳ありません...かなりあなたはそれを詳しく説明してください可能性が....それを得るdidntの? –

関連する問題