オートコンプリートドロップダウン-データが多すぎる、タイムアウト
質問
つまり、タウンシップのリストを含むオートコンプリートドロップダウンがあります。最初は、データベースに20個ほどあったのですが...最近、データの一部が他の郡にあることに気付きました...他の州にさえあります。したがって、その答えは、米国のすべての町でこれらのデータベースの1つを購入することでした(はい、私は知っています、ジオコーディングが答えですが、時間の制約により、その機能の時間があるまでこれを行っています)。
つまり、20〜25の町があるとき、オートコンプリートは素晴らしく働きました...今では80,000あるので、それほど簡単ではありません。
入力するとき、これを行うための最良の方法はデフォルトでこの状態になると考えています。 NJをデフォルトとする状態セレクターをページに追加し、必要に応じて別の状態を選択できます。これにより、リストが<!> ltに絞り込まれます。 1000.ただし、同じ問題が発生する可能性はありますか?誰もが大量のデータを含むオートコンプリートの回避策を知っていますか?
ウェブサービスのcodezを投稿すべきですか?
解決
1文字だけを入力した後にオートコンプリートしようとしていますか? 2つ以上になるまで待つのでしょうか?
また、上位10行のみを返すことができますか?
他のヒント
アプリケーションが返されたデータの量を窒息させているように聞こえ、その後ブラウザでレンダリングしようとしました。
データベースには適切なインデックスがあり、パフォーマンスの問題はないと想定しています。
サービスの結果は、100件までに制限します。ユーザーは、それ以上の方法は見ません。
また、2文字または3文字が入力されたときにサービスからデータを取得するだけなので、クエリの範囲がさらに縮小されます。
幸運!
バカな質問かもしれませんが、...町名の列にインデックスがあることを確認するためにチェックしましたか? 80Kの名前でデータベースに負荷がかかるとは思わないでしょう...
あなたは正しい軌道に乗っていると思います。一連のカスケード入力、State-<!> gt;を使用します。郡-<!> gt;後続の各1つが、先行する1つの値に基づいて潜在的な人口を取得するタウンシップ。各入力は、潜在的な母集団に対して検証して、偽の入力を回避します。毎回データベースに戻るのではなく、中間結果をキャッシュし、オートコンプリートのクエリを実行することをお勧めします。
基礎となるSQLを制御できる場合は、いくつかの<!> quot; UNION <!> quot;を試してください。複数の<!> quot; OR like <!> quotを含む1つのクエリではなくクエリ。 where句の行。
SQLの最適化に関するこの記事をご覧ください。
SQLクエリをTOP句で制限します。 <!> quot; less than <!> quot;を使用することも好きです。代わりに:
select top 10 name from cities where @partialname < name order by name;
that <!> quot; Ce <!> quot; <!> quot; Cedar Grove <!> quot;および<!> quot; Cedar Knolls <!> quot; <!> quot; Chatham <!> quot; <!> amp; <!> quot; Cherry Hill <!> quot;常に10を取得します。
LINQの場合:
var q = (from c in db.Cities
where partialname < c.Name
orderby c.Name
select c.Name).Take(10);