SQL
最近ではフレームワークの発展により性能を意識したSQLを書くことは少なくなりました。
たまに性能がでない時に思い出すのはリテラルとバインド変数化です。
SQLにはリテラルとバインド変数化というものがあります。
リテラルはハードパースであるため、重い処理となります。
バインド変数化はソフトパースであるため、軽い処理となります。
ハードパース
構文解析して構文エラーがないかどうかをチェックするとともに、テーブル名と列名が正確であるかどうかをチェックし、SQL 文を最適化して最善の実行計画を見つけます
ソフトパース
SQL 文が共有プールにすでに存在していることから、アクセス権限やセッション検証のためのわずかな処理で完了します
リテラルSQL
以下、SQLにはWHERE句に1000というリテラルが含まれます。
SELECT * FROM table WHERE no = 1000;
バインド変数化
以下は先程のSQLをバインド変数化した例となります
variable no=1000;
SELECT * FROM table WHERE no = :no;
Javaで書くと以下の構文になります。
PreparedStatement pstmt =
conn.prepareStatement(“SELECT * FROM table WHERE no = ?”);
pstmt.setInt(1, 1000);