- Home
- SQL Server
- [SQLクエリ]パフォーマンス向上のための注意事項
[SQLクエリ]パフォーマンス向上のための注意事項
- 2016/11/22
- SQL Server
- SQL Server, クエリ, 応答時間改善
- コメントを書く
クエリ応答時間改善のための7つの注意事項
1.暗黙の型変換の除去
(日付など)CASTやFORMAT関数を使用してデータ型とフォーマットを揃える
関数を使ったほうが、コードが長くなるが早い
2.結合するテーブルの行数の削減
結合する左右のテーブルの行を極力絞り込む
外部結合を行う場合は、結合条件に絞込み条件を追加する。
副問合せを使用して行数を絞り込む場合、可読性向上のために、WITH句を使用する方法もあり。
3.同じテーブルの外部結合は極力避ける
例えば、コードや区分の違いにより、副問合せや、外部結合を多用するのは控える。
集計が必要なら、SUM関数の中にコードによる条件分岐を設ける。
4.出力する必要のない項目は、極力選択リストに含めない
WHERE句に使用する抽出条件など、SELECT~FROM間の選択リストに書いてしまいがちだが、抽出条件を選択クエリに含める必要がない。
例えば、ある期間の日付と商品コードでグループ化したクエリの検索条件に、ある期間全体の商品コードごとの個数を抽出条件にする場合など。
最後(最外部)のクエリで結合して、抽出条件に含める。
5.テーブル型変数は使用しない
テーブル型変数に値を格納するには、INSERT文を使用するが、INSERT文は時間がかかため、極力使用しない。
6.ループは極力使用しない
T-SQLのWhileなどのループは、時間がかかるため、極力使わない
特にテーブル変数のINSERTでループを行うと極端に遅くなる。
7.インデックスを設定する
特に、ある検索条件を追加した場合に、応答がなくなる場合。
これはクエリの書き方の問題ではない。
クエリの実行プランを表示して、不足しているインデックスがあれば追加する。
一説によると、インデックスの効果は、クエリ内容の見直しに比べると6%程度の効果しかないといわれるが、クエリ内容を見直しても応答時間に問題がある場合には効果がある。
(4万行のテーブルから、1万3千行のデータを抽出する場合、16秒から2秒に改善する場合もある)
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。