1

MySQLを使用JOINして記事とそれに関連するすべてのコメントを選択していますが、記事を選択して複数のコメントがある場合、コメントの数だけ同じ記事が複製されることに気付きました。例:次の列の
テーブルがあり ます: 1。2 .次の列 のテーブル: 1。2.3 。articles
id
article
comments
c_id
body
a_id

私が使おうとしたMySQLクエリ:

SELECT  * FROM `articles`
JOIN`comments`
ON (`articles`.id = `comments`.a_id)
WHERE `articles`.id = 134  

そしてこれが最終結果です:

id  article   c_id  body        a_id
134 Article1    2   Comment1    134
134 Article1    3   Comment2    134
134 Article1    8   Comment3    134  

だから私の質問は:私はarticleすべてのコメントに対して同じ列の値を取得しているので、これはとにかくMySQLクエリまたは私のWebアプリケーションを遅くしますか?本当に必要なデータよりも多くのデータを要求しているので。
クエリを2つの単純なクエリに分けることはできますSELECTが、これはやり過ぎでしょう。

読んでくれてありがとう。

編集:列の値が大きく、1,000文字以上の文字が含まれている場合、それを複製してからどうなりますか
article

4

5 に答える 5

3

すべてのコメントに対して同じ記事列の値を取得しているので、これはとにかくMySQLクエリまたは私のWebアプリケーションを遅くしますか?本当に必要なデータよりも多くのデータを要求しているので。

データベースは必要以上のバイトを送信しているため、これに関連するパフォーマンスコストが発生しますが、目立たない場合があります。

クエリを2つの単純なSELECTクエリに分けることはできますが、これはやり過ぎでしょう。

測定せずに言うのは難しいです。articleの値が数文字ではなくギガバイトである場合は、1つではなく2つの選択を実行することをお勧めします。

于 2012-07-12T17:17:56.313 に答える
2

1つのクエリで表示するすべての記事を取得し、すべてのコメントに対して別のmysql呼び出しを実行してからWHERE comments.a_id IN (1,2,5,6,9,10)、アプリケーションで、表示している記事に関連するコメントをプルできます。

これは、記事ごとに個別のクエリでコメントを取得するよりも効率的だと思います。

于 2012-07-12T17:18:14.410 に答える
1

これで結構です。2つのクエリに分割するには、データベースに2回アクセスし、同様のクエリを2回実行する必要があります。ほとんどの設定では、より多くのデータを取得するよりもコストがかかります。クライアントがデータベースと通信するために使用するプロトコルがこれを最適化することを願っています。MySQLには、クライアントとサーバー間で圧縮を使用するオプションがあります。これにより、送信されるデータが最適化されます。

これがアプリケーションにとって重要である場合は、ベンチマークを実行して、最適なものを選択する必要があります。

実装が簡単なアプローチに従わない場合は、アプリケーション全体のパフォーマンス/負荷テストを実行し、ボトルネックを見つけて修正します。

于 2012-07-12T17:18:44.813 に答える
1

通常、別のクエリでデータベースからより多くの情報を取得するために戻るよりも、必要以上の情報を選択する方が適切です。

articleこの場合、レコードを取得することによってシステムの速度が大幅に低下しているとは想像できません。心配な場合は、それを使用せずに、select *次のように明示的に列を呼び出します。

SELECT `comments`.c_id , `comments`.body, `comments`.a_id
FROM `articles`
    JOIN `comments` ON `articles`.id = `comments`.a_id
WHERE `articles`.id = 134 
于 2012-07-12T17:19:10.757 に答える
1

2つのクエリを別々に実行すると、確かに遅くなります。クエリを実行する前に「article.id」がある場合は、JOINを使用する必要はありません。

于 2012-07-12T17:20:05.070 に答える