現場で使えるSQLの極意
自己紹介
湯峰 洋志(ユミナー)
会社 福島情報処理センター
仕事内容
自治体向けシステム導入・運用
運用スペシャリスト(自称)
自己紹介
村上 俊政(ソンマサ)
会社 福島情報処理センター
仕事内容
自治体向けシステム導入・運用
趣味 マラソン・温泉巡り
パフォーマンスを向上させるSQL
SQ
L
データ
SQL実行時の流れ
1.SQLの解析
2.実行
3.データの取り出し処理(SELECT文)
SQL実行時の流れ -Oracle データベースの場合-
SQ
L
共有
プール
解析
実行
存在しない
存在する
SQLの記述を統一させる
スペースの個数・改行位置・大文字/小文字に注
意
SQLの記述を統一させる
Select *
From SomeTable;
SELECT *
FROM
SOMETABLE;
別SQL扱い
バインド変数の利用
Select *
From SomeTable
Where col_1='1';
Select *
From SomeTable
Where col_1 ='2';
別SQL扱い
バインド変数の利用
Select *
From SomeTable
Where col_1=:A;
Select *
From SomeTable
Where col_1=:A;
同一SQL
:A="1" :A="2"
SQL実行時の流れ -Oracle データベースの場合-
SQ
L
共有
プール
解析
実行
存在しない
存在する
列番号は使わない
Select col_1,col_2
From SomeTable
Order by 1,2;
Select col1,col2
From SomeTable
Order by col_1,col_2;
解析時にOrder by句の1=col_1、2=col_2
と読み替えが発生する。
暗黙の型変換は使用しない
Select *
From SomeTable
Where col_1=1;
Select *
From SomeTable
Where col_1='1';
解析時に型変換が発生
実際にデモ
インデックスの利用
インデックス使用時の注意
インデックス列に対する演算
Select *
From SomeTable
Where col_1*1.1> 100 ;
インデックス列に演算を行なっている場合は使用されない
Select *
From SomeTable
Where col_1>100/1.1;
インデックス列に対する関数の使用
Select *
From SomeTable
Where
Substr(col_1,1,1)='1';
Indexに存在するデータは、Col_1のデータの為使用されない
NULL述語の使用
Select *
From SomeTable
Where col_1 is null;
IndexデータにNULLは存在しないため使用されない
後方/中間検索
Select *
From SomeTable
Where
col_1 Like '%A';
後方/中間一致検索では使用されない
前方一致検索の場合は使用される
Select *
From SomeTable
Where
col_1 Like 'A%';
実際にデモ
まとめ

現場で使えるSqlの極意