0

助けてくれてありがとう、

私は 100 万の名前とニックネームのリストを持っていますが、各名前にはニックネームが 1 つしかありません。それぞれの名前には対応するニックネームがあります (同じであっても)

私は通常、PHP と MySQL を使用してデータを行に格納し、select ステートメントを使用してフェッチします。この方法は最適化されていない可能性があるため、ご相談させていただきます。

100 万のうち約 600 の名前の対応するニックネームを毎回取得する必要があるスクリプトが作成され、これは各ユーザーのページロードで実行されます。

PHP と MySQL の使用経験があります。

プレーンテキスト、mysql、またはその他の方法でデータを構築できます。

このデータセットを保存して取得する最良の方法は何ですか?

4

2 に答える 2

2
  1. ページネーション / 遅延読み込み

    一度にすべてのアイテムをロードしないでください。それらを段階的にロードします。実際の例は、Facebook と Twitter です。設定された量のアイテムのみをロードし、一番下に到達するか「さらにロード」をクリックすると、次の N 個のアイテムまたは Google がロードされます。Google では、10 億の可能な結果のうち、1 ページあたり N 個のアイテムのみが表示されます。

  2. JSON を使用する

    最近でも、AJAX リクエストで書式設定された HTML を返す人をまだ見かけますが、そうしないでください。サーバーに初期ページ (初期 HTML を含む) をロードさせ、残りを AJAX 経由で JSON にロードします。JSON データが到着したら、クライアント側のテンプレート スクリプトで HTML を作成します。これにより、帯域幅とダウンロード時間を節約できます。

  3. 圧縮を使用

    圧縮を使用する理由は明らかです。

  4. 必要なフィールドのみを SQL にロードする

    多くの場合、「いつか役立つかもしれない」という理由ですべての列をロードします - いいえ。一連のニックネームをロードする場合は、SQL でニックネームのみをロードします。もちろん、ペアリングには常に主キー フィールドが必要なので、この場合は 2 列です。

そして、ニックネームと人物が 1 対 1 の関係にすぎないことがわかったので、同じテーブルに格納します。別のテーブルにある必要はほとんどありません。これにより、JOIN 操作を省くことができます。

于 2012-04-29T11:54:22.247 に答える
0

egyql が述べたように、名前の列にインデックスを追加します。また、SQL選択に制限を設定しますSELECT name, nickname FROM your_table LIMIT 0, 10

于 2012-04-29T11:49:25.567 に答える