現行の最新は 12c なので、内容は古いかもしれないです。
環境を準備するのがめんどくさい
Oracle初心者がまず陥る罠。
実行環境、開発環境ともに準備するのが非常にめんどくさい。
開発環境を構築する為には、Oracle Client をインストールし、場合によっては TNSの設定も必要になる。
ネットの情報だけでは分かりにくいので、バージョンにあった入門本を購入したほうがよい。
あと、**Oracle Client アンインストールは茨の道。**なかなかきれいに消えてくれない。
なお、MySQLで開発環境を構築する場合、DLLを入れておけば完了。
バージョンに厳しい(ODP.NET)
Oracle Client と、DLLのバージョンが違うと全く動作しない。
その割には、結構バージョンが細かかったりする。
ツール
色々ツールは出ているのだけど、Oracle社の提供しているOracle Sql Developerが個人的にはよいと思う。
実行計画(Explain)を確認しながらのSQLチューニング作業の場合、こういったツールは必須。
phpMyAdmin 的なものもあるのだけど、あまり一般的ではないかも。
phpOraAdmin
http://sourceforge.net/projects/phporaadmin/
Edition
Standard One、Standard、Enterprise など幾つかのEditionがある。
Editionによっては使えない機能があるので注意が必要。
ただ、パラレルクエリー(SQLの実行を並列化する)ぐらいは Standard とかでも利用できたらいいのに、と思う。
SQLのチューニングについて
MySQLに比較してかなり複雑なSQLを記述できる。
ただ一方その複雑さ故に、パフォーマンス向上の為のSQLチューニングに結構な時間を割くことになる。
Oracle はあるタイミング(例えば大幅にデータが追加になった場合)で統計情報をとり、また、SQLの実行計画は統計情報に依存する。
つまり、SQLが変わらなくても実行計画は変わる可能性はある。
MySQLの場合、データ量などによって変わることはないので、それに比べると、賢いといえば賢い。
ただ、統計情報依存の為、適切なデータ量を元にしないSQLチューニングは意味がない。
DBであれば当然の話かもしれないが、Oracleの場合、その傾向がより強い。
テーブルのID自動連番
DBによってバラバラだけど、
Oracleはsequenceチーム、MySQLは自動連番チーム。
フィールド変更について(ALTER TABLE)
MySQLと違い、ALTER TABLE
で途中にフィールドを追加、ということができない。
Oracle運用環境で、フィールド末尾に後から追加されたっぽいフィールドがあることが多いのはそのせい。
外部結合
その昔は LEFT JOIN
とかがなくて、代わりに(+)
というOracle独自の記法を利用していたようです。
標準SQLではないので、割とスルーしてます。
WITH句を利用した再帰SQL
まず、MySQLにはWITH句がない。
他のDBと比較しても、これはちょっと奇妙なことではあると思う。
mysql “with” clause
http://stackoverflow.com/questions/324935/mysql-with-clause
OracleにはWITH句があり、Oracle11gは再帰SQLとしてそれを利用できる。
-- HOGE.ID=10以下のツリー一覧を取得するサンプル
WITH T(ID) AS (
SELECT ID FROM HOGE WHERE ID=10
UNION ALL
SELECT HOGE.ID FROM HOGE WHERE HOGE.PARENT_ID=T.ID
)
SELECT T.ID FROM T;
fetchについて(ODP.NET)
厳密に調べたわけではないので、これは本当に感想。
MySQLと比較して、fetchなどデータ読取速度が少し遅いかもしれない。
というか、SELECT * FROM HOGE
とかフィールド数を意識しないで書くと、速度に影響を与えるケースが多い。
パフォーマンスを考慮するなら、他のDBでもあまり変わらないのだろうけど、Oracleの場合、BLOBを使う機会が多いので**(通常の文字列型フィールドは2000文字ぐらいまでしか扱えない)**、尚更そうなのかもしれない。
パーティション分割
Oracle は1テーブルを複数のパーティションに分割することができる。
で、抽出対象が複数パーティションにまたがっている場合、インデックスがあっても読取速度が落ちる。
なお、データ条件によるパーティション振分けもできるので、パフォーマンス要アップ時はそういうことも考慮したりするらしい。
プロシージャ
Oracleのプロシージャは相当強力なんだけど、MySQL派からすると**「それアプリケーション側でやればいいんじゃね?」**的な感じで全く出番がない。
検証作業が大変そうだし、ORMが活用されることが多いので、今後ますます出番が減る予感。
まるっとROLLBACK
できるのは素敵なんだけどね。
ネットの情報
当然なのかもしれないが、MySQLと比較して、ネットの情報が少ない
それから、「それぐらいの知識しかないならOracle触らないでください」という説教じみた回答に出くわす機会が多い気がする。
なので、拙い感想ながらも、投稿してみることにしました。