SQLのパフォーマンスチューニングについて
そもそもパフォーマンスとは?
主に以下の3つ。
スループット
単位時間あたりの処理能力。並列処理が出来る件数が増えるほどこのスループットの値が向上する。
レスポンスタイム(レイテンシー)
処理を実行してからの結果が帰ってくるまでの時間。 1処理自体にどのくらい時間がかかるか。
スケーラビリティ
データベースをはじめとするサービスのパフォーマンスは必ずハードウェアのスペックに依存するため、メモリやCPUの追加、ディスクのSSD化などに柔軟に対応できる必要がある。
パフォーマンス改善のために
1.インデックスを張る
インデックスは索引であり、これがあることで素早くデータを検索できる。インデックスはテーブルとは別に管理され、その分メモリを消費するので、何でもかんでもインデックスを張ればいいというものではない。辞書で索引があるということはそのためのページがあることであり、データベースにおいてもそれは同じである。
また、データの更新・追加・削除が多いとそのたびにインデックスを書き換える必要が出てくるので、かえってパフォーマンスが低下する可能性がある。そのため、インデックスを張るのはデータの更新が少ないデータベースにした方がよい。
その他、身長や体重、年齢のようにデータの種類が多いカラムにインデックスを張った方がいい。逆に性別、血液型のようなデータ選択肢が少ないカラムに貼ると、かえってパフォーマンスは低下する。
2.ビューの乱用を避ける
ビューは便利であるが、パフォーマンスはよろしくない。ビューを呼び出すたびにSELECT文が実行されるからである。
3.ORよりもINを使う
INの方がORよりも速度が速い。
4.範囲指定には、BETWEEN演算子を使用
範囲指定に比較演算子「<」「>」を使うよりも、BETWEEN演算子の方が速い。また、可読性もよくなる。
5.where句では、最も条件に合致しやすいものから記述する
範囲指定に比較演算子「<」「>」を使うよりも、BETWEEN演算子の方が速い。また、可読性もよくなる。
6.「*」よりもフィールド指定の方が速い
取得したいデータのカラム名を指定した方がよい。