2017/9/7 db tech showcase Tokyo 2017(JPOUG in 15 minutes)にて発表した内容です。
SQL大量発行に伴う処理遅延は、ミッションクリティカルシステムでありがちな性能問題のひとつです。
SQLをまとめて発行したり、処理の多重度を上げることができれば高速化可能です。ですが・・・
AP設計に起因する性能問題のため、開発工程の終盤においては対処が難しいことが多々あります。
そのような状況において、どのような改善手段があるのか、Oracleを例に解説します。
2017/9/7 db tech showcase Tokyo 2017(JPOUG in 15 minutes)にて発表した内容です。
SQL大量発行に伴う処理遅延は、ミッションクリティカルシステムでありがちな性能問題のひとつです。
SQLをまとめて発行したり、処理の多重度を上げることができれば高速化可能です。ですが・・・
AP設計に起因する性能問題のため、開発工程の終盤においては対処が難しいことが多々あります。
そのような状況において、どのような改善手段があるのか、Oracleを例に解説します。
4. 423 ) ). )(
SQLの改善
・わかりやすい所
> 副問い合わせをやめる
> WHEREは絞り込み量の多い条件から順番に書く
> WHEREで関数・演算を使わない
> LIKEを避ける、LIKEの後方一致は使わない
> IS NULL, IS NOT NULLを使わない
> DISTINCTを使わない、EXISTSやGROUP BY を使う
SELECT * FROM ( SELECT * FROM users )
SELECT * FROM users WHERE gender = 1 AND age = 20
SELECT * FROM users WHERE age + 10 > 100
SELECT * FROM users WHERE name LIKE ‘%子’
SELECT * FROM users WHERE job IS NULL
SELECT DISTINCT country FROM users
5. ( 76 5 ). )
SQLの改善
・細かい所
> ONやWHEREの左辺データ量 > 右辺データ量 にする
> テーブルに別名をつける
> ORは当たりやすい順に書く
> SELECT * を使わない、フィールドを指定する
> WHEREの条件は型をあわせる
> BIND変数などを多用して、SQLキャッシュを利用する
SELECT * FROM users WHERE user_id = ANY ( SELECT user_id FROM user_log )
SELECT user_id FROM users
SELECT u.user_id FROM users u WHERE u.name = ‘牟田神西’OR u.name = ‘鈴木’
SELECT * FROM users
SELECT u.name FROM users u WHERE u.age = ’25’ AND u.registed = ‘2014-8-10’
SELECT u.name FROM users u WHERE u.age = :AGE
6. ( 76 5 ). )
インデックスの改善
・インデックスが貼ってあるか確認
・クエリがインデックスを用いているか確認
・クエリ実行計画を確認する
* AR =EI ,
53 OMALM ; I=HA DOC= +4- P= OA UD CA
T E T MA A N NS A T N=> A T NS A T MME> A FASM T FAS T FAS AI T LA T L M T RNL= T
T T 13 T OMALM T LA T OMAL E R T OMAL E R T T IMN" IMN T T MEIC DALA T