私の上司は、運用中のテーブルから列を削除してはいけないと確信しています (それについての何かがインデックスを台無しにする可能性があります)。何年にもわたって、この「慣行」により、テーブルの多くが何百もの未使用のレガシー列で肥大化してきました。
(生成された) データレイヤーをリファクタリングする必要があること以外に、未使用の列をテーブルから削除しない確かな理由はありますか? 私の上司は、壊れてインデックスが作成されたり、他の副作用が発生したりする可能性があるというのは正しいですか?
私の上司は、運用中のテーブルから列を削除してはいけないと確信しています (それについての何かがインデックスを台無しにする可能性があります)。何年にもわたって、この「慣行」により、テーブルの多くが何百もの未使用のレガシー列で肥大化してきました。
(生成された) データレイヤーをリファクタリングする必要があること以外に、未使用の列をテーブルから削除しない確かな理由はありますか? 私の上司は、壊れてインデックスが作成されたり、他の副作用が発生したりする可能性があるというのは正しいですか?
私が目にする唯一の副作用は、テーブルのサイズを縮小し、空の列を使用しないインデックスを改善することでパフォーマンスが向上することです(空の列がある場合)。インデックスで使用されている列を削除することはできないため、とにかくインデックスを再作成する必要があります。まず、テスト環境でテーブルをクリーンアップし、副作用がないことを確認するために十分なテストを行ってから(発生しない)、変更を本番環境に適用します。また、データ/ビジネスモデラーを手放します。
列を削除するときに、そのようなことに遭遇したことはありません。現在インデックスで使用されている列を削除できるとは思わないため、インデックスをクリーンアップする必要があります。ただし、未使用の列をインデックスに残すとパフォーマンスが向上しないため、とにかくそれを行う必要があります。インデックス内の列が必要な列と一致しないため、パフォーマンスが低下する可能性が高くなります。
さらに、使用されていない列を保持することにより、不要な列に追加のスペースが必要になるため、アクセスが遅くなります (これにより、行サイズが大きくなり、読み取りが遅くなり、1 つのデータ ページの行が少なくなります)。
ええと... 考え始めたところ、上記以外の問題が発生しました。列がクエリによって直接参照されている場合、列を削除すると、ビュー、関数、およびストアド プロシージャが破損する可能性があります。適切に保守/最適化されたシステムでは、これは問題にならない可能性があります (実際に使用されていない場合は、どこにも参照すべきではありません)。