1

次のようなテーブル構造があるとします

ここに画像の説明を入力

すべてのユーザー メタを取得したい

画像内のすべてのテーブルを結合する大きなクエリを実行する方が良いですか...

SELECT [columns ...] FROM usermetasections LEFT JOIN usermetakeys ON ...
LEFT JOIN usermetas ON ...
LEFT JOIN users ON ...
WHERE users.id = xxx

...

...または...のような小さなクエリに分割します

Loop through SELECT * FROM usermetasections
    Loop through SELECT * FROM usermetakeys WHERE section = xxx
        Loop thought SELECT * FROM usermetas WHERE key = xxx AND user = xxx

最初のアプローチを行えば、「マシン」のパフォーマンスは速くなりますが、開発者のパフォーマンスは悪くなると思いますか? クエリを解析して PHP オブジェクトにするためのコードが増えますか?

4

1 に答える 1

4

通常、データベース自体に結合を任せます。それが、リレーショナル データベース管理システムの目的です。これには、平均的なアプリケーション コードよりも優れたパフォーマンスを発揮する無数の最適化が含まれています。

ネットワーク経由で送信される情報に関して実際に多くのオーバーヘッドが発生する場合があります (たとえば、1000 レコードをループし、いくつかの複雑な条件が満たされた場合にのみ、他のテーブルからの情報が必要になります)。アプリケーションコードに結合をさせることができますが、それでも再クエリすることができますSELECT yourfields FROM yourtables-joined WHERE yourtable.id IN (list,of,IDs)

于 2011-06-07T06:39:59.193 に答える