2

JOINSについて質問があります。SQL JOINはクエリのパフォーマンスを低下させますか?多くのJOINを含むクエリがあります。悪いパフォーマンスはこれらのJOINSから来ていると言えますか?はいの場合、クエリでJOINの代わりに何をすべきですか?

これが私の質問の一部です

......
FROM (((((tb_Pinnummern INNER JOIN tb_Fahrzeug ON tb_Pinnummern.SG = tb_Fahrzeug.Motor_SG) INNER JOIN tb_bauteile ON tb_Pinnummern.Bauteil = tb_bauteile.ID) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Plus ON Fehlercodes_akt_Liste_FC_Plus.ID=tb_bauteile.[FC_Plus]) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Minus ON Fehlercodes_akt_Liste_FC_Minus.ID=tb_bauteile.[FC_Minus]) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Unterbrechung ON Fehlercodes_akt_Liste_FC_Unterbrechung.ID=tb_bauteile.[FC_Unterbrechung]) LEFT JOIN Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Aderschl ON Fehlercodes_akt_Liste_FC_Aderschl.ID=tb_bauteile.[FC_Aderschl]
WHERE (((tb_Fahrzeug.ID)=[forms]![frm_fahrzeug]![id]));
4

4 に答える 4

3

はい、そうです..テーブル間のレコードと結合の数を増やすと、実行時間が長くなります..LEFT/RIGHT JOINは、INNER JOINよりも絶対に高速ではありません。テーブルの右側の列にインデックスを付けると、クエリのパフォーマンスが向上します。

クエリの結合が多すぎて実行頻度が高い場合は、別の方法、つまり SQL VIEW またはマテリアライズド VIEW (Materialized VIEW - Oracle を使用している場合) を作成します。

于 2012-05-23T07:10:20.813 に答える
1

ウェル結合は明らかに処理する必要があり、この処理はCPU、メモリ、およびIOを消費します。

これに加えて、適切なインデックスなどが配置されていない場合、結合のパフォーマンスが非常に悪くなる可能性があることを考慮する必要があります。

ただし、正しいサポートインデックスを使用したSQL結合では、他のどの方法よりも速く必要な結果が得られます。

上記のSQLと同じ結果を計算するために何をする必要があるかを考えてみてください。最初のテーブルを読み取り、正しい順序で並べ替え、次に2番目のテーブルを読み取り、並べ替えてから、2つの結果セットをマージしてから、3番目のテーブルに進みます......または、最初のテーブルからすべての行を読み取り、それぞれについて行はSQLを発行して、一致する行を取得します。

于 2012-05-23T07:09:26.973 に答える
0

結合は、実行する SQL クエリのパフォーマンスを確実に低下させます。作成した SQL の SQL 計画を生成し、SQL のコストを削減する方法を検討する必要があります。クエリ分析ツールは、それを支援するはずです。

上記で定義したクエリで理解していることから、内部結合にあるテーブルからすべての行をフェッチし、左結合のテーブルから特定の列 (存在する場合) を取得しようとしています。

その場合、以下の形式で記述されたクエリが役立ちます。

select (select Fehlercodes_akt_Liste_FC_Plus.column1 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Plus where Fehlercodes_akt_Liste_FC_Plus.ID=tb_bauteile.[FC_Plus]),
    (select Fehlercodes_akt_Liste_FC_Minus.column2 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Minus where Fehlercodes_akt_Liste_FC_Minus.ID=tb_bauteile.[FC_Minus]),
    (select Fehlercodes_akt_Liste_FC_Unterbrechung.column3 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Unterbrechung where Fehlercodes_akt_Liste_FC_Unterbrechung.ID=tb_bauteile.[FC_Unterbrechung]),
    (select Fehlercodes_akt_Liste_FC_Aderschl.column4 from Fehlercodes_akt_Liste AS Fehlercodes_akt_Liste_FC_Aderschl where Fehlercodes_akt_Liste_FC_Aderschl.ID=tb_bauteile.[FC_Aderschl]),
    <other columns>
FROM
(tb_Pinnummern INNER JOIN tb_Fahrzeug ON tb_Pinnummern.SG = tb_Fahrzeug.Motor_SG)
INNER JOIN tb_bauteile ON tb_Pinnummern.Bauteil = tb_bauteile.ID) as <aliastablename>

WHERE <aliastablename>.ID=[forms]![frm_fahrzeug]![id];
于 2012-05-23T07:27:21.880 に答える
-1

Sql 結合はパフォーマンスをまったく低下させません。逆に、基になるデータベース モデルが適切に実装されていると仮定すると、非常に多くの場合、クエリが指数関数的に高速化されます。この問題では、インデックスが非常に重要です。

于 2012-05-23T07:03:59.470 に答える