0

ニュースセクションがあります。記事はタグ付けされ、3 つのテーブルに保存されます。

投稿:

posts_id,title,body

タグ:

tags_id,name

投稿タグ:

posts_id,tags_id

現時点での問題は、ニュース セクションのフロント ページに最初の 10 件の記事のプレビューが表示されることです。各プレビューには、タグ リストが表示されます。タグ リストを表示するということは、タグのリストを取得するために投稿ごとに再度クエリを実行する必要があることを意味します。

したがって、たとえば、10 個のプレビューには、1 つのクエリ (投稿から 10 個の投稿を取得する) + 10 個のクエリ (タグの投稿ごとに 1 つと、タグ リストを取得するための posts_tags) が必要です。ページをロードするための 11 個のクエリは、最終的にボトルネックになる可能性があるようです。

プレビューのタグ付けはやめたほうがいいですか? PIVOT は同じ量のクエリになりますか?

4

2 に答える 2

0

あなたが試すことができる2つの主な解決策があります:

于 2012-05-12T14:51:27.387 に答える
0

「結合」を使用して、すべてを 1 つのクエリにまとめることができます。ただし、これらの種類のクエリは、特に何らかのグループ化を行う場合、非常に「高価」になる可能性があります。したがって、サブセレクトを試してみることをお勧めします。例えば:

SELECT (
    SELECT GROUP_CONCAT(name)
    FROM   tags, posts_tags
    WHERE  posts_tags.posts_id = posts.posts_id
    AND    tags.tags_id = posts_tags.tags_id
) FROM posts LIMIT 10

このような副選択を使用すると、通常の結合とグループ化を行うよりもはるかに優れた結果を得ることができます。

もちろん、キャッシングはまだ良い考えです...

于 2012-05-12T14:58:49.153 に答える