だから私がこのクエリを持っているとしましょう:
SELECT * FROM table1 A, table1 B where A.id = B.id;
table1のidにインデックスがある場合でも、テーブル全体をスキャンします...テーブル全体をスキャンしないようにこれを高速化する方法はありますか?
だから私がこのクエリを持っているとしましょう:
SELECT * FROM table1 A, table1 B where A.id = B.id;
table1のidにインデックスがある場合でも、テーブル全体をスキャンします...テーブル全体をスキャンしないようにこれを高速化する方法はありますか?
私の前に実行計画はありませんが、これは実際にはスキャンTableA
している可能性が最も高いだけです。その理由は、に他の条件がないためですTableA
。TableB
統計的であるという理由だけで、現時点でそれを求めているはずです。ここで、に別の条件を指定しTableA
、その条件がインデックスに一致した場合、テーブル全体をスキャンしていないことがわかります。
さらに、上のインデックスTableA
がクエリの対象インデックスである場合、実際にはのデータページを読み取ることさえありませんTableA
。
さらに、との間に外部キー制約がTableA
あり、idフィールド以外のTableB
ものを読み取っていない場合は、データページも読み取られません。TableB
さらに、からTableB
のデータが必要な場合でも、そのデータがインデックスにある場合は、データページを読み取る必要はありません。
ただし、最後に、を選択しているため、両方のテーブル*
からすべての列を選択しているため、これが非常に効率的なクエリになる可能性はほとんどありません。
それが長すぎないことを願っていますが、私がどこから来たのかをあなたが知っていることを確認したかったのです。