2011-01-26 4 views
2

複雑なSQL問合せを作成する際に、適切な索引を使用していることを確認し、フル・テーブル・スキャンを回避する方法を教えてください。インデックスを持つ列(プライマリキー、ユニークキーなど)にのみ参加するようにすることでそれを行います。これで十分ですか?Sqlインデックスとフル・テーブル・スキャン

答えて

1

クエリの実行計画を見て、クエリオプティマイザが物事を検索する必要があると考える方法を見てください。この計画は、一般に、テーブルの統計、インデックスの選択性、および結合の順序に基づいています。オプティマイザは、フル・テーブル・スキャンの実行が索引ルックアップよりも「安価」であると判断できることに注意してください。探すために

他のもの:

  • 可能な場合は、サブクエリを避けます。

  • は「OR'-述語の使用状況に依存して異なる戦略があるので、句

+0

2つ目のポイントを明確にしてください。 ORの問題は何ですか? – SQB

+0

多くの場合、一部のフィールドに特定の値がある行または空の行を選択する必要があります。その結果、索引は使用されません。以前は、OR述語で予期しない動作が発生しました。例として、A = X OR A = Yのクエリ計画は、A = YまたはA = Xの場合に異なる場合があります。 –

4

クエリの実行計画をデータベースに問い合わせて、そこから処理を進めます。

where句にも表示されている列のインデックスを作成することを忘れないでください。

2

最高のインデックスが何であるかを言うのは難しいですで
を最小限に抑えます。それでも、あなたは今インデックスを作るべきクーペのものがあります。

  1. インデックス時にはselect文のパフォーマンスが向上し、挿入および更新時のパフォーマンスが低下します。
  2. インデックステーブルには、特定のフィールドのキーとして使用する必要はありません。また、実際の生活指数には、ほとんどの場合、複数のフィールドが含まれています。
  3. パフォーマンスが満足できる場合は、「将来の目的」のインデックスを作成しないでください。インデックスがまったくない場合でも。
  4. インデックスをチューニングするときは、常に実行計画を分析してみます。実験するのを恐れないでください。

      +
  5. 表スキャンは常に悪いことではありません。

これは私のものです。

1

データベースチューニングアドバイザー(SQL Server)を使用してクエリを分析します。クエリのパフォーマンスを調整するために必要なインデックスを提案します

関連する問題