7

ここに、単純化されたバージョンでこれに見えるデータベース設計があります。

building:

  • ID
  • 属性1
  • 属性2

そこにあるデータは次のようなものです:

  • (1、1、1)
  • (2、1、2)
  • (3、5、4)

そして、次のように構造化されたテーブルattribute1_valuesおよびattribute2_values:

  • ID
  • 価値

次のような情報が含まれています。

  • (1、「オプション 1 のテキストによる説明」)
  • (2、「オプション 2 のテキストによる説明」)
  • ...
  • (6、「オプション 6 のテキストによる説明」)

これが最適な設定かどうかはわかりませんが、プロジェクト マネージャーの要件に従って設定されています。IDを台無しにすることなくテキストを簡単に変更できるため、間違いなく真実があります。

しかし、属性を一覧表示する必要があるページにたどり着きました。2 つの主要なオプションがあります。

1) すべての値を収集buildingすると同時に、attribute{x}_valuesテーブルから正しいテキスト表現を選択する 1 つの大きなクエリを作成します。

2) テーブルからすべての値を収集する小さなクエリを作成しbuildingます。その後、各属性のテキスト表現を 1 つずつ取得します。

選択する最良のオプションは何ですか? オプション 1 は、オプション 2 よりもさらに高速ですか? もしそうなら、メンテナンスに関して余分な手間をかける価値はありますか?

4

7 に答える 7

1

もう 1 つの提案は、必要なデータのみを使用してサーバー上にビューを作成し、そこからクエリを実行することです。これにより、サーバー側での作業が維持され、必要なものだけを毎回プルできます。

于 2013-12-09T15:15:15.677 に答える
0

あなたの質問は非常に一般的であり、答えを得るには、このページがどのように見えるか、データセットの大きさについてもっとヒントを与えるべきだと思います. 属性を持つすべての建物を取得しますか、それとも一度に 1 つだけ取得しますか? あなたのデータ構造は非常に単純に見え、raspberrypi以上のものは非常にうまく処理できます。

一度に 1 つのレコードが必要な場合は、特別なテクニックは必要ありません。テーブルを結合するだけです。すべての建物をリストする必要があり、db 時間を節約したい場合は、データを測定する必要があります。建物よりも多くの属性がある場合は、1 つの方法を選択する必要があります。8 つの属性と 2000 の建物がある場合は、テーブルごとに選択して配列に属性をキャッシュし、配列を使用してそれらを印刷することを考えることができます。最新のコンピューターで非常に単純なテーブルを使用しても、速度が低下したり改善されたりすることはないと思います。

$att1[1]='description1'
$att1[2]='description2'
....
于 2014-01-15T10:33:56.287 に答える
0

その中間のものをお勧めします。PHP の最初のテーブルからの結果を解析し、各 attribute[x]_values テーブルから選択する必要がある属性の数を計算します。

その後、属性ごとに 1 つのクエリ、または建物ごとに 1 つのクエリではなく、テーブルごとに 1 つのクエリを使用して、属性を一括で選択できます。

于 2013-11-05T23:17:42.003 に答える
0

属性テーブルに少数の行がある場合は、最初にそれらをフェッチし、すべてをフェッチすることをお勧めします! 配列のインデックスキーとしてidを使用して、それらをいくつかの配列に格納します。

次に、データの構築に進むことができます。それぞれの配列を使用して属性値を探すだけです。

于 2013-09-24T13:56:08.727 に答える
-1

一度に 1 つのクエリを実行しないでください。それらを 1 つのクエリに結合してみてください。

MySQL はクエリをキャッシュし、はるかに高速に実行されます。PhP ループは、データベースに対して多くのリクエストを行うよりも高速です。

クエリ キャッシュには、SELECT ステートメントのテキストと、クライアントに送信された対応する結果が格納されます。後で同じステートメントを受信した場合、サーバーはステートメントを再度解析して実行するのではなく、クエリ キャッシュから結果を取得します。

http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

于 2013-09-24T13:36:17.277 に答える