メインコンテンツまでスキップ

「SQL」タグの記事が1件件あります

全てのタグを見る

SQLを作成する時は、パースを意識しよう

西村
ディアシステム(株)開発一部第4課

こんにちは開発一部第4課の西村です。

システムの運用保守で性能問題が発生した際、SQLを見直すことになることは、よくあります。
性能問題が発生してからチューニングを実施すると、どうしても運用に影響がでてしまうので、設計段階から意識して改善していくことが望ましいです。
SQLのチューニングにはいろいろな方法がありますが、本記事では「パース」に注目して書いていこうと思います。
「パース」に注目することで、パフォーマンスだけではなく、セキュリティ面での強化も期待できます。

はじめに

パースとは、SQL文を解析することです。
解析結果は共有プールにキャッシュされ、解析結果を使用することにより、すぐにSQL文を実行することができます。
これを、ソフトパースと呼びます。
キャッシュされた解析結果が存在しない場合、SQLの検証、実行計画の作成を行った後、SQLを実行します。
これを、ハードパースと呼びます。
パフォーマンスの高いシステム設計をするためには、できるだけハードパースを回避する必要があります。
では、パース時間を減らすための方法を3点紹介します。

SQL構文を統一する。

同じ内容のSQLでも、大文字小文字の違いや空白の個数、改行位置、別名の違いで、別のSQL文と解釈します。
ハードパースを回避するため、SQL構文は統一しましょう。

(大文字と小文字の違い)

画像1

(改行位置の違い)

画像2

バインド変数を使用する。

SQLが解析される際、リテラル値を使用していると、IDの数だけ解析されます。
バインド変数を使うことで、同じ構文のSQL文は再利用され、ハードパースの頻度を下げることができます。 例

① リテラル値使用

② バインド変数使用

画像3

結合する表の数を制限する。

実行計画が作成される際、アクセス順番の検討が行われます。
nテーブルを結合する場合、単純に考えるとn!通りの順序があります。
パース時間を軽減するために、表の結合数を考慮しましょう。
また、テーブル設計で多くの表を結合する必要がないように意識しましょう。

画像4

(結合4表)

おわりに

「パース」を意識したSQL設計は、パフォーマンスの最適化だけではなく、保守性にも繋がります。
繰り返し実行される処理を中心に、ボトルネックを可視化しながら改善をしていきましょう。

未経験から始める
システムエンジニア

一生モノのITスキルを身につけよう

あなたの経験とスキルを
ディアシステムで発揮してください!