1

だから私がこのクエリを持っているとしましょう:

SELECT * FROM table1 A, table1 B where A.id = B.id;

table1のidにインデックスがある場合でも、テーブル全体をスキャンします...テーブル全体をスキャンしないようにこれを高速化する方法はありますか?

4

1 に答える 1

0

私の前に実行計画はありませんが、これは実際にはスキャンTableAしている可能性が最も高いだけです。その理由は、に他の条件がないためですTableATableB統計的であるという理由だけで、現時点でそれを求めているはずです。ここで、に別の条件を指定しTableA、その条件がインデックスに一致した場合、テーブル全体をスキャンしていないことがわかります。

さらに、上のインデックスTableAがクエリの対象インデックスである場合、実際にはのデータページを読み取ることさえありませんTableA

さらに、との間に外部キー制約がTableAあり、idフィールド以外のTableBものを読み取っていない場合は、データページも読み取られません。TableB

さらに、からTableBのデータが必要な場合でも、そのデータがインデックスにある場合は、データページを読み取る必要はありません。

ただし、最後に、を選択しているため、両方のテーブル*からすべての列を選択しているため、これが非常に効率的なクエリになる可能性はほとんどありません。

それが長すぎないことを願っていますが、私がどこから来たのかをあなたが知っていることを確認したかったのです。

于 2012-08-03T16:07:49.603 に答える