1

私たちは、約200万の名前と住所、および300万の関連するサブスクリプションと会議の出席レコードを持つmySQLデータベースの検索結果システムのプロトタイプを作成してきました。

検索が実行され、すべての結果が返される時点で、結果ごとに2番目のクエリを実行して、その人の一意のIDのサブスクリプション/会議を検索します。すべての重要な列にインデックスがあり、個々のクエリはphpMyAdmin(0.0xxx秒)で非常に高速に実行されますが、これをWebページにフィードして表示し(PHP、DataTablesを使用してページング)、ページのレンダリングには数秒かかります。データをLuceneデータベースに移植しようとしましたが、これはLIGHTNINGに似ていますが、ボトルネックは結果を取得するのではなく表示しているようです。

これは、ブラウザでページを作成、提供、レンダリングするオーバーヘッドが原因だと思います。GROUP_CONCATを実行して元のクエリのサブスクリプションコードを取得することで、上記のサブクエリを削除できると思いますが、結果が表示されたページの表示を高速化するにはどうすればよいですか?

私はほとんど考えていませんが、AJAX /サーバーサイドページングを使用したクエリがここに行く方法かもしれません(おそらく50の結果が得られ、クエリが小さく、ページが小さく、より速く提供できます)が、皆さんが提案することを歓迎します持ってる。

4

1 に答える 1

2

Datatablesでページ付けを使用している場合でも、サーバー側の機能を使用していても、最初はすべての結果がページのソースコードに読み込まれます。

一度に200万行をロードすると、常にレンダリングが遅くなります。サーバー側のページ付けを行う必要があります。AJAXまたは通常のPHPスクリプトを使用できます。

また、キャッシュシステムを使用してサーバーからのデータの読み込みを高速化し、不要なときにデータベースを呼び出さないようにすることも検討できます。データが時間的にランダムに変化する可能性がある場合は、いつでも関数を使用して、最後にデータをキャッシュしてからデータが変更されたかどうかを確認し、変更された場合は、キャッシュされたデータを更新できます。

于 2013-03-27T10:11:46.003 に答える