4

NotORMと呼ばれるこのPHPDBライブラリを見ていて、そのドキュメントを読んだときに、結合のスタンドについて読んだことがあります。議論は基本的に、結合を使用した単一のSQLクエリのパフォーマンスと、複数の選択クエリを使用してDB抽象化レイヤーで結果を相互参照するパフォーマンスでした。

私は常に、複数のクエリを使用するよりも単一のクエリの方が優れている必要があることを知っていたので、NotORMのアイデアは私にとって新しいものでした。この「機能」を見たのはNotORMだけなので、これもわかりません。

これについてのご意見をお伺いしたいと思います。

どのクエリがより良く、より速いですか?

これ...

SELECT application.*, tag.*
    FROM application
    LEFT JOIN application_tag ON application.id = application_tag.application_id
    LEFT JOIN tag ON application_tag.tag_id = tag.id
    ORDER BY application.id

対...

SELECT * FROM application LIMIT 4;
SELECT * FROM application_tag WHERE application_id IN ('1', '2', '3', '4');
SELECT * FROM tag WHERE id IN ('21', '22', '23', '24');

この2番目の方法は本当に実用的ですか?

4

1 に答える 1

1

単一のクエリはかなり高速になると思います。ただし、php と MySQL 間の通信に依存します。ベンチマークを試みたところ、クエリを実行するためだけに顕著なオーバーヘッドがありました (単純ですが)。

ただし、クエリが複雑になりすぎると、保守が困難になります。

カスタム プロシージャを使用しようとしている場合は、別のポイントが発生します。たとえば、レーベンシュタイン距離 (単語の類似度) に基づいて何らかの処理を行う必要がありました。これに対して私が見つけた MySQL 関数は、データを取得して PHP のレーベンシュタイン関数で処理するよりもはるかに遅いものでした。

于 2012-10-13T19:40:25.857 に答える