sql >> データベース >  >> RDS >> Mysql

MySQLストアドプロシージャはそれらを使用するか使用しないか

    実際のプログラミング言語コードとは異なり、次のようになります。

    • 移植性はありません(すべてのデータベースには独自のバージョンのPL/SQLがあります。異なるバージョンの同じ データベースに互換性がありません-私はそれを見ました!)
    • 簡単にテストすることはできません-本物が必要です (dev)データベースインスタンスをテストして、ビルドの一部としてコードを単体テストすることは事実上不可能です
    • 簡単に更新/解放できない-ドロップ/作成する必要があります。つまり、変更します。 それらをリリースするための本番データベース
    • ライブラリをサポートしていない(他の誰かがサポートしているのになぜコードを書くのか)
    • 他のテクノロジーと簡単に統合することはできません(それらからWebサービスを呼び出してみてください)
    • 彼らはFortranとほぼ同じくらい原始的な言語を使用しているため、有用なコーディングを行うのにエレガントで手間がかかるため、通常はそれが主な目的であるにもかかわらず、ビジネスロジックを表現することは困難です。
    • デバッグ/トレース/メッセージロギングなどを提供しないでください(一部のデータベースはこれをサポートしている可能性があります-私はそれを見ていません)
    • 構文や他の既存のプロシージャへのリンクを支援するための適切なIDEが不足しています(たとえば、EclipseがJavaに対して行うように)
    • それらのコーディングに熟練した人々は、アプリコーダーよりもまれで高価です
    • これらの「高性能」は神話です。データベースサーバー上で実行されるため、通常は増加します。 dbサーバーの負荷がかかるため、通常はそれらを使用すると削減されます。 最大トランザクションスループット
    • 定数を効率的に共有できない(通常、テーブルを作成し、プロシージャ内からそれを検索することで解決されます-非常に非効率的です)
    • など

    非常にデータベース固有のアクション(たとえば、データベースの整合性を維持するためのトランザクション内アクション)がある場合、またはプロシージャを非常にアトミックでシンプルに保つ場合は、おそらくそれらを検討することをお勧めします。

    事前に「高性能」を指定する場合は注意が必要です。それはしばしば良いデザインを犠牲にして悪い選択につながり、あなたが思っているよりもずっと早くあなたを噛むでしょう。

    自分の危険でストアドプロシージャを使用します(そこにいて、二度と戻りたくない人から)。私の推奨は、疫病のようにそれらを避けることです。



    1. MySQLクエリのシングルクォート、ダブルクォート、およびバックティック

    2. MySQLで通知用のデータベースを設計するためのガイド

    3. Oracleにタイムスタンプを挿入する方法は?

    4. コマンドラインからLinux上のMySQLデータベースを選択する