2013/05/25

OracleにおけるSQLとは何ぞや?

■SQLとは何ぞや?

基本をおさらいしましょう。
OracleにおけるSQLとは何でしょうか?

簡単でいうと
Oracleのデータベースの中にあるデータを操作したり、データベースの構成を変更したりする命令文です。
別にOracle固有の言語というわけではなく、MySQLやPostgreSQLなどでも使われます。
(筆者はOracleしか扱ったことがないので、これ以降Oracleのことを書いています。)

■SQLの種類

DML(Data Manipulation Language)
  SELECT ・・・ データを検索する
  INSERT ・・・ データを追加する
  UPDATE ・・・ データを更新する
  DELETE ・・・ データを削除する

DDL(Data Definition Language)
  CREATE ・・・ オブジェクトを作成する
  DROP ・・・ オブジェクトを削除する
  ALTER ・・・ オブジェクトの提示を変更する
  GRANT ・・・ ユーザ権限を付与する
  REVOKE ・・・ ユーザ権限を削除する


■SQLの処理ステップ

(1)PARSE = SQLの解析
  ・構文に間違いがないかチェックする
  ・指定されたオブジェクトが存在するかチェックする
  ・実行計画を決定する

(2)BIND = 変数のバインド
  ・バインド変数を指定している場合、値を代入するためのメモリ領域を確保する

(3)EXECUTE = SQLの実行

(4)FETCH = 行のフェッチ
  ・SELECT文の場合のみ、ユーザに問い合わせ結果を返す



SQLの基本的な説明は以上です。
これ以外にもいろいろありますが割愛します。


■暴れん坊SQL対策

紹介してきたSQLですが、実は暴れん坊なんです。
ちゃんとデータベースの設定やデータの状態など、
様々な側面を考慮して実行しないと、
とんでもないことが起こったりします。

その最たる例が「処理遅延」です。

Oracleはオプティマイザと呼ばれる機能が
SQLの処理において、
「どうやってデータを取り出すか」(=実行計画)
を決めます。
この実行計画がSQLの処理速度の最重要ポイントになります。

昔のOracleではルールベース・オプティマイザというものが、実行計画を決めていました。
これは「所定のルール」に則って決めるので、人間がコントロールしやすいものでした。

しかし最近ではコストベース・オプティマイザという、
データの件数や偏り、設定値などを考慮してOracle先生が勝手に実行計画を決めてしまうものが主流(10gからはこちらのみ)になっています。
人間によるコントロールが非常に難しいです。

何もしていないのに、こちらが予期しない実行計画になっていたり、
よかれと思ってやった処理が、逆に悪影響を及ぼしたり・・・

もはや人間様がOracle先生のご機嫌を伺いながら
SQLの書き方や設定値などを決めていかなければいけないという、
大変世知辛い関係になってしまっています。

データベース管理者は、この関係を少しでも良好にするために、
様々なテクニックを覚える必要があります。

いつかOracleを手玉にとれるようになることを目指して、
このブログに様々なテクニックを書き溜めていきたいと思います。

0 件のコメント:

コメントを投稿