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

テーブルをロックせずにALTERTABLE?

    他の唯一のオプションは、とにかく多くのRDBMSシステムが行うことを手動で行うことです...
    -新しいテーブルを作成します

    その後、古いテーブルの内容を一度にチャンクにコピーできます。ソーステーブルのINSERT/UPDATE/DELETEには常に注意してください。 (トリガーで管理できます。これにより速度が低下しますが、ロックではありません...)

    終了したら、ソーステーブルの名前を変更してから、新しいテーブルの名前を変更します。できればトランザクションで。

    終了したら、そのテーブルを使用するストアドプロシージャなどを再コンパイルします。実行計画はおそらく無効になります。

    編集:

    この制限が少し貧弱であるというコメントがいくつかあります。それで、なぜそれがどのようになっているのかを示すために、私はそれに新しい視点を置くと思いました...

    • 新しいフィールドを追加することは、すべての行で1つのフィールドを変更するようなものです。
    • フィールドロックは行ロックよりもはるかに難しいので、テーブルロックは気にしないでください。

    • 実際にはディスク上の物理構造を変更しているので、すべてのレコードが移動します。
    • これは実際にはテーブル全体のUPDATEに似ていますが、より大きな影響があります...


    1. SQL Server:SQLクエリを使用してテーブルの主キーを取得します

    2. 多くの通知を伴う.NETSqlDependencyと高速ポーリング?

    3. Postgres-致命的:データベースファイルはサーバーと互換性がありません

    4. 主要なワイルドカードシークのフォローアップ#1