0

問題:
次の構造を持つテーブルが与えられます。

Table:  ID, ID_POINTER, DATA

このテーブルで連鎖データ シーケンスをクエリしたいと考えています。
次の「遅い」クエリを最も高速にクエリするにはどうすればよいですか。

SELECT * FROM Table 1, ...., Table n WHERE
Table 1.ID = TABLE 2.ID_POINTER and .........  and TABLE n-1.ID = Table n.ID_POINTER
and Table 1.DATA = wish data 1  AND .......... AND Table n.DATA = wish data n

?

私の質問:
に置き換えるTable , Tableのは効率的Table INNER JOIN Tableですか?

4

2 に答える 2

0

まず、適切な結合構文を使用するようにクエリを書き直します。「,」は「クロス結合」を意味し、非常にコストのかかる操作です (さらに悪いことに、テーブルの 1 つが空の場合、行がなくなることもあります)。

「,」を使用すると、where 句で間違いを犯しやすくなり、パフォーマンスが低下します。

次に、クエリ オプティマイザが最適な結合パスを選択する必要があります。ただし、これを行うには、テーブルの統計を更新する必要があります。そのため、統計を更新したことを確認してください (これはデータベースによって大きく異なります)。

第三に、特に最適化のために、使用しているデータベースについて常に言及する必要があります。

そして最後に、このようなクエリは、結合列にインデックスを設定することで、通常 (常にではありません) 高速になります。これは、すべての行の小さなサブセットを選択するフィルターがある場合に特に当てはまります。

于 2012-08-13T20:18:38.373 に答える