0

mysql と mysql (php スクリプト) でのクエリの効率について知識のある人が、次の 2 つのアプローチのどちらがより効率的かについてのガイダンスを提供してくれることを願っています。

多くのことを単純化すると、2 つの mysql テーブルがあります。

表 A = 200 単語、各単語がタグです。表 B = 4 時間ごとにアップロードされる 8 タイトル、したがって、合計 (8 x 6) = 48 タイトルが毎日アップロードされ、各タイトルには平均 10 語が含まれます。

私は、毎日の終わりに表Aの単語を1つずつ取得し、それが48のタイトルのいずれかの単語に含まれているかどうかを調べ、見つかった場合はそのタイトルにタグを付けるPHPスクリプトを持っています単語が見つかりました。現在のところ、スクリプトはうまく機能しています。

つまり、基本的には、48 のタイトルで 200 回の検索を行い、表 a の単語のいずれかが見つかった場合に各タイトルに適切なタグを付けます。

今、私はウェブサイトに変更を加え、これらのタイトルに 1 日 1 回ではなく 4 時間ごとにタグを付けたいと考えています。したがって、スクリプトがタグ付けするたびに、(48 ではなく) 8 つのニュースのみにタグ付けする必要があり、同じ 200 件の検索を実行しますが、48 タイトルではなく 8 タイトルでのみ実行します。この操作を 1 日 6 回行います。

スクリプトを変更した方がはるかに効率的ではないので、8 つのタイトル (合計 (8 x 10 = 80 ワード) を含む) で 200 回の検索を行う代わりに、その方法を逆にしますか? つまり、逆に変更します。 80 語 (表 B の 8 つのタイトルに存在) が、表 A の 200 語の中に存在するかどうかを確認します。

しばらくすると、タイトルは 2 時間ごとに収集され (つまり 4 タイトルのみ)、次に 1 (つまり 2 タイトル) になるため、スクリプトで更新される「タイトル」の数は時間とともに減少します。

スクリプトの動作方法を変更すると、より効率的になりますか? 改善は十分に関連性がありますか?

このルートで行くのであれば、どちらの方法で行うのが最適な方法でしょうか。つまり、最初にタグ付けするタイトルとタグの数を確認することです。X 件以上のタグ付けが必要な場合は、スクリプト A (実際のスクリプト) を使用しますが、X 件未満のタグ付けが必要な場合は、新しいスクリプト B を使用します。

これを簡略化して小規模に説明しました。このスクリプトは現在、200 の異なるサイト (今後さらに多くのサイト) で動作し (各サイトには、1 時間あたりにタグ付けするタグの数とタイトルの数が異なります)、すぐにさらに多くのサイトで実行できるようになります。スクリプトがこれをどれだけ効率的に処理するかで、サイトの完全な効率を大幅に改善できます。

この変更を行う意味はありますか?この変更がいつ意味を持つか、または効率の改善を計算する方法を確認するために実行できる計算はありますか?

4

1 に答える 1

0

あなたの数値は十分に低いように見えるので、どの作業アプローチも私には十分に速いと感じます。変更が重要かどうかを実際に判断するには、ベンチマークを行う必要があります。その点に関する計算は、多くの要因に依存するため定式化するのが難しいためです。

とはいえ、タイトルから単語を取得してタグのテーブルで検索する方が、現在の実装よりも高速になるはずです。私の推論は、単語数にあまり基づいていませんが、代わりにインデックスの使用に基づいています。タグのリストは通常​​かなり静的であり、タグ単語にインデックスがあり、完全に一致するものを探します。 、 右?一方、タイトルは頻繁に変更されるため、インデックスを作成すると実際にはパフォーマンスが低下する可能性があります。また、部分文字列の一致を探す場合、通常の (つまり、全文ではない) インデックスは役に立ちません。

したがって、タグのリストに適切なインデックスがあることを確認してください。新しいタイトルが到着したら、PHP でそれらを単語に分割し、これらの単語を一時的な MySQL テーブルにインデックスと共に挿入します。その後、単一の更新クエリを発行してすべてのタグを追加し、一時テーブルを削除できます。更新は次のようになります。

INSERT INTO post_tags (post_id, tag_id)
SELECT temp_words.post_id, tags.id
FROM temp_words INNER JOIN tags ON temp_words.word = tags.name

post_tagsこれは、適切なデータベースの正規化が必要とする方法で、各行が 1 つの投稿の 1 つのタグを示す単一のテーブルがあることを前提としています。temp_tags新しく処理されたタイトルの単語を保持するテーブルです。

于 2013-01-15T13:37:08.653 に答える