とくいかもくはSQLです!

今日はプチ事例の紹介しますね

SELECT
*
FROM
実績テーブル A
LEFT OUTER JOIN
マスタテーブル M
ON
M.荷主コード = A.荷主コード
AND M.商品コード = A.商品コード
WHERE
A.荷主コード = ‘001’
AND A.商品コード = 自作関数JANto商品コード(‘001’, ‘4571152071xxx’)
ORDER BY
A.作成日 DESC

すごい単純明快なSQLだけど、これを実行したら結果が出るのに5分以上かかって、HHTがタイムアウトしました

で、、WHERE句の最後の行を消すと一瞬で結果が出るので、このJANから商品コードを取得する自作関数が
あやしいかなと思うのだけど、この自作関数を単体でコールするとこれも一瞬で結果が出ます

なのでこう直しました↓
WHERE句に1行追加です

SELECT
*
FROM
実績テーブル A
LEFT OUTER JOIN
マスタテーブル M
ON
M.荷主コード = A.荷主コード
AND M.商品コード = A.商品コード
WHERE
A.荷主コード = ‘001’
AND A.商品コード = 自作関数JANto商品コード(‘001’, ‘4571152071xxx’)
AND M.商品コード = 自作関数JANto商品コード(‘001’, ‘4571152071xxx’) — この行追加
ORDER BY
A.YMD_MKDATE DESC

これで結果は一瞬で出る様なりました!
SQLは「複雑だから遅い」ってわけでもなく、こんな単純なクエリであっても書き方によっては遅いし、
工夫の余地はあるよ、、というけっこう良い例だと思ったので、自分の覚えも兼ねて投稿です!

今後もちょっとしたネタや事例を追加していきますのでよろしくお願いします

投稿者プロフィール

Kanazawa
KanazawaITソリューション部 部長