0

どんなタイトルにしようか迷っていたので、タイトルをつけるのに時間がかかりました。SQL queries基本的に、私の問題は、私がやろうとしていることを実行するための効率的な方法を扱い、考え出すことです。

例として、2 つのテーブルがあるとします。

Table 1 (Articles): ID | ArticleName | AuthorID
Table 2 (Users):    ID | AuthorName

私がやろうとしているのはプルです。たとえば、最後の 5 つの記事です。ここから、記事をプルするたびに、プルする 2 番目のテーブルを照会するための while ループがありますAuthorName where ID=AuthorID

要するに、5 つの記事に対する 1 つのクエリと、著者名を取得するための別の5 つのクエリがあります。これは、10 から 20 以上の余分なクエリがある 10 から 20 以上の記事を含むページでさらに悪化します。

これらのステートメントを結合し、プルする記事の AuthorName をプルさせるより効率的な方法はありますか?

表 1 で AuthorID を使用する理由は、ユーザー名が変更されても何も壊れないようにするためです。これに加えて、(私が理解している限りでは) データベース ストレージを大幅に削減します。

私はまだSQLに少し慣れていないので、これを解決する方法についてのアイデアは大歓迎です。

ご不明な点がございましたら、お気軽にお問い合わせください。

4

2 に答える 2

2
SELECT * FROM `Articles` INNER JOIN `Users` ON `Articles`.`AuthorID`=`Users`.`ID`
于 2012-09-01T04:32:14.653 に答える
0

これを行うには 2 つの方法があります。追加の作成者テーブルにある 1 回限りのクエリを実行して完全な結果セットを表示するか、最初のクエリからの個別の識別子を使用してJOIN、後続の呼び出しですべての作成者を取得する 2 パスを実行できます。SELECT ... FROM Authors WHERE ID IN (...)

小さなリストや小さなテーブルの場合、JOINほとんどの場合、この方法の方が便利です。大きなリストの場合、2 パスのアプローチは「ばかげている」ように見えますが、多くの場合、データベースで結合を行うよりもパフォーマンスが優れています。たとえば、記事の数が非常に多く、著者の数が少ない場合JOIN、大規模なクエリにかなりの量の作業が追加されますが、事後に小さな二次クエリを作成することで排除できます。

この場合、100 万レコード未満でフェッチ サイズが小さい場合は、 を使用しJOINます。

于 2012-09-01T04:50:28.010 に答える