プロジェクトレポートOracleからAurora(MySQL)への移行(その4)2018年4月いっぱいで抜けることになったプロジェクトについて、DB技術者のオッサンが実際に現場で思ったことや感じたことを書き残すプロジェクトレポート的な社員ブログです。←イマココサマリ3.技術的なハードルOracleからAurora(MySQL)へ移行する際に技術的に苦労した点を書きたいと思います。大きく、以下の点から記述しようと思います。厳密に言うと関数ではないものも含めてしまいますが、OracleにあってMySQLに無い関数というのが結構あります。ROWIDのような疑似列やROW_NUMBERのような分析関数であったり。今回のプロジェクトでは、基本的には同じような機能を探して置き換えたのですが、上記のような関数については強引なまでのSQL書き換えを行いました。お蔭で元々長いSQLが更に数百行のオーダーで長くなることがしばしばありました。関数の書き換えに関しては結構サンプルが落ちているので、まずはググってみることをオススメします。同じ名前の関数があっても、使い方が少し違ったりすることがあります。この程度のことは若干のSQLの修正で済むのですが、挙動が異なることがありました。印象深いものをあげると、CONCAT関数でNULLをくっつけた場合、OracleではなぜかNULLにならず、MySQLではNULLになることでした。この件に関しては、MySQLの挙動が正しいと思います。他にも挙動の異なる関数があるので、油断せずに調査および実機検証することをオススメします。3.3.SQL構文の有無MySQLは軽さを重視して開発されているため、複雑な構文が用意されていません。一方で、Oracleは便利な機能が満載です。データへのアクセスパスを考えることができれば、余計な機能と言ってもいいほどの機能が実装されています。SQL構文の有無という点で、今回のプロジェクトで1番苦労させられたのがWITH句でした。disりますが、今回のプロジェクトでは、WITH句をあまりにも多用しすぎるあまり、結果的に1つのSQLで同じテーブル(しかもデータ件数が最大級のヤツ)を何重にも呼び出しており、猛烈な性能劣化を起こしていました。便利な機能を多用しすぎてSQLがシッチャカメッチャカになって、開発者や設計者もどうやってデータが取れてるのか分かってないっていう、モノツクリ屋さんにあるまじき状態になっていました。チューニングも兼ねてWITH句を解消後に、テーブルの重複呼び出しを解消するようにSQLを組み替えたりしたら、MySQL上で動かなくなっていたSQLが数分で動くようになりました。このSQLをOracle上で動かしたら、恐らく爆速です(笑)ちょっとウデ自慢が入りましたが、この項はこんなところで。長くなるので、今回はここまでにしようと思います。コメントをキャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。technology.。