LoginSignup
6
5

More than 5 years have passed since last update.

SQLパフォーマンス

Last updated at Posted at 2018-04-07

SQLの書き方によるパフォーマンスチューニング
SQLを作成するうえで気を付けるべき基本的な事

ソート回避

物理メモリが使用されると劇的に遅い

  • GROUP BY
  • ORDER BY
  • SUMやMAXなどの集計関数
  • DISTINCT
  • UNIONなどの集合演算子
  • RANKなどのOLAP関数

インデックスを確実に使う

インデックスが使われない書き方

  • 項目に計算している (amount * 1.1 > 1000など)
  • IS NULL
     ※MySQL、PostgreSQLはNULLをインデックスに格納する
  • <>,NOT INなどの否定形
  • OR文
  • 復号インデックスと列指定条件順序が異なる
  • 部分一致、後方一致
  • 暗黙の型変換

また、インデックスは適切に作成する
- カーディナリティの高いカラム
- マルチカラムインデックスの検討する
- カバリングインデックスを使用する

中間テーブルを減らす

  • サブクエリNG
  • 集約より先に結合する
  • Viewは使わない

メモリアクセスを減らす

  • レコードの存在チェックでCOUNTを使わない
     ※LIMITやROWNUMを使用する

そもそも遅いのはなぜか

  • 1つのSQLが遅い
    • チューニングする
  • 1回では遅くないSQLを複数回実行している
    • 1回でまとめてとるなど、実行回数を減らす

最初は早かったけど運用していく中で遅くなる

  • 単純にデータ量の増加
  • 機能変更などによりデータアクセスパターンの変化
  • アクセス量の増加

大量データ削除で考える事

リソースを奪ってしまい、サービスが停止/遅くなるのを防ぐ。
途中sleepを入れながら、少しずつ削除する。

6
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5