1

これは、私がしばらく苦労してきた質問の一般化です。私のケースは、複数の「投稿タイプ」 (記事、ブログ投稿、製品など) を持つ WordPress サイトを持っていることです。最近の慣行として、各投稿タイプの検索結果を別々のカテゴリに表示したいと考えています。

私が抱えている問題は、検索の構造化にあります。投稿の種類ごとに個別のデータベース クエリを実行する必要がありますか、それとも 1 つの大きなクエリを実行し、PHP 経由ですべてを分離する必要がありますか? 私は後者に傾く傾向がありますが、私が直面している問題はページネーションにあります。LIMIT1 つの投稿タイプから複数の一致があった場合、検索で他の投稿タイプからの結果が返されないため、おそらくクエリに何も設定する必要はありません。

では、パフォーマンスと一般的なベスト プラクティスの観点からすると、LIMIT句のない 1 つの大きなクエリを作成するのと、検索ごとに複数のクエリを実行するのとではどちらがよいでしょうか?

注: これは、WordPress Stack Exchange サイトで以前に尋ねた質問に似ています。そのとき、複数のクエリ ソリューションを受け入れましたが、これについてはまだかなり確信が持てません。

4

2 に答える 2

1

私の経験では、通常、データベースにできるだけ少ない作業を依頼し、PHP に重労働のほとんどを任せたほうがよいでしょう。通常は高速です。

そこで、2 つの非常に単純なクエリ (テーブルごとに 1 つ) を実行してから、それらを PHP コードでマージ/ソートします。

データ セットが非常に大きい場合、または Web ホストが粗末な場合、PHP スクリプトがメモリ不足になる可能性があります。その場合にのみ、適切な方法を探し始めることをお勧めします。 MySQLで(一時テーブルが適切な場所であると思われます)。

しかし、PHP のパフォーマンス限界に達した場合、MySQL で行うことは実際にはさらに遅くなり、良いパフォーマンスを得るにはデータベース構造を変更する必要があるのではないかと思います。これを行う 1 つの方法は、既存のテーブル構造を維持しながら、すべてのテーブルからの重複データを含む 3 番目のテーブルを作成することです。これは検索用であり、すべてを同期させるためのコードです。

たとえば、Web サイトのユーザーによってアップロードされたすべての PDF ドキュメントを含むテーブルがあり、任意のドキュメントに含まれるすべての単語を含む別のテーブルと、それらの間の多対多のリンク テーブルがあります。

新しい PDF がアップロードされるたびに、その中のすべての単語が検索され、リンク テーブルにレコードが挿入されます。この方法では、実際に PDF ドキュメントを検索する必要はなく、高速検索を可能にするように構造化されたインデックス テーブルのみを検索します。

于 2012-08-16T19:19:55.580 に答える
0

このタイプの検索では、Solrなどのソリューションを使用して、インデックス作成に心を開いています。このようなソリューションで多くのことを行うことができ、一般的な方法で検索するユーザーのタイプに数学的に非常によく一致します.

于 2012-08-21T12:56:09.550 に答える