6

データベース構造:

id  galleryId                 type     file_name       description
1   `artists_2010-01-15_7c1ec`  `image`  `band602.jpg`   `Red Umbrella Promo`
2   `artists_2010-01-15_7c1ec`  `image`  `nov7.jpg`      `CD Release Party`
3   `artists_2010-01-15_7c1ec`  `video`  `band.flv`      `Presskit`

アプリケーションの 1 つのセクションの画像、別のセクションのビデオなどを抽出します。次のように、セクションごとに複数の mysql クエリを作成する方がよいでしょうか。

$query = mysql_query("SELECT * FROM galleries WHERE galleryId='$galleryId' && type='image');

...または、連想配列を作成し、結果セットを使用する必要があるときはいつでも配列を何度もループする必要がありますか?

考えてくれてありがとう。

4

5 に答える 5

12

それは、読みやすさとパフォーマンスのどちらがより重要かによって異なります。データベース接続はコストがかかるため、単一のクエリと PHP 配列の事前入力は実行が高速になると思いますが、各セクションの単純なクエリははるかに読みやすくなります。

膨大な量のトラフィックが発生することがわかっている場合 (希望だけではない場合) を除き、私は別のクエリを使用し、最適化が問題になると思われる場合は心配します。その時点で、データ アクセス レイヤーの構築やキャッシュの追加など、他にもやりたいことがあります。

于 2010-01-15T18:27:18.417 に答える
2

「セクション」とは、ユーザーが表示できる個別の単一ページ (個別の HTTP 要求) を意味する場合、必要に応じてタイプごとのクエリをお勧めします。たとえば、画像データ セットしかないページの場合、実際にはビデオ データ セットを取得する必要はありません。いずれにせよ、すべてのページがヒットするたびにデータベースに接続することになるため、すべてを取得するのに多くの時間を節約することはできません (私は推測します)。

「セクション」が 1 つのページのさまざまな部分を意味する場合は、一度にすべてを取得します。これにより、クエリの時間を節約できます (クエリは 1 つだけです)。

ただし、データ セットのサイズによっては、すべてをクエリする PHP のメモリ制限で問題が発生する可能性があります。その後、メモリ制限を引き上げることができますが、それが失敗した場合は、おそらくタイプごとのクエリにフォールバックする必要があります。

型ごとのクエリ アプローチを使用すると、コンピューティング負荷の一部がデータベース サーバーに移動します。これは、本当に必要なものだけを要求してフェッチするためです。また、結果をフィルター処理して並べ替えるためのコードを記述する必要はありません。フィルタリングとソートは、通常、データベースの方が PHP コードよりも優れています。可能であれば、MySQL のクエリ キャッシュを有効にします。これにより、PHP で記述できるものよりもはるかにこれらのクエリが高速化されます。

于 2010-01-15T18:15:21.597 に答える
2

データがすべて 1 つのテーブルから取得されている場合、クエリは 1 つだけ実行します。

写真のセクション、ビデオのセクション、音楽のセクションなどを含む単一のページを作成していると思います。メディアの種類別に並べ替えられたクエリの戻り結果を記述します。すべての写真、次にすべてのビデオ、次にすべての音楽。

于 2010-01-15T19:17:50.193 に答える
1

複数のクエリを使用することをお勧めします。クエリを実行するたびに、すべてのデータが引き出されてメモリにロードされます。5 つの異なるタイプがある場合、そのタイプの各ページが必要なデータの 5 倍をロードしていることを意味します。

一度に 1 つだけでも、LIMIT/OFFSET クエリを使用して、100 を超える場合、または一度に 1 ページに表示できるほど多くのクエリがある場合は、かなり迅速にページ分割を開始することをお勧めします。

于 2010-01-15T18:02:41.363 に答える