「時期尚早の最適化は諸悪の根源」
データベース プログラミングに関しては、この引用はナンセンスだと思います。開発者は最初から効率的なコードを書きたいとは思わないため、アプリケーション全体を書き直すのは非常にコストがかかります。すべての t-sql コードは、次にデータベースのパフォーマンスにどのように影響するかという観点から考える必要があります (もちろん、データの整合性が第一です)。パフォーマンスは、データの整合性以外のすべてに優先する必要があります。
はい、問題が発生するまで実行してはいけない最適化がありますが、当然のこととして実行する必要があり、後で修正しないでください。効率の悪いコードが効率にどのように影響するかを理解すれば、そうでないコードよりも、効率の良い可能性のあるコードを書くのに時間はかかりません。カーソルコードに関する Cervo の議論はその一例です。セットベースのアクションは、ほとんどの場合、カーソル ソリューションよりもはるかに高速です。ほとんどの場合、カーソルを作成するよりもセットベースのソリューションを作成する方が時間がかかりませんが、その方法を実現する唯一の方法は、カーソルを作成しないことです。
また、フィールド名を指定する代わりに select * を使用する理由はありません。MSSQL では、これらの名前をオブジェクト エクスプローラーからドラッグできるので、それを行うのが難しすぎることはわかりません。しかし、実際に必要なフィールドのみを指定することで、ネットワーク リソースとデータベース サーバー リソースと Web サーバー リソースを節約できます。では、なぜプログラマーは select * の遅延オプションを使用して、後で最適化することを心配する必要があるのでしょうか?
インデックスと同じこと。あなたは、インデックスの最小限のセットを行うと言います。最小の定義方法によっては、それで問題ないかもしれませんが、すべての外部キーにインデックスを付けることが重要であり、最も頻繁に where にあるいくつかのフィールドにインデックスを持たないデータベースをプッシュしたくありません条項。ユーザーがクライアントの外部にいて、内部にいない場合、サイトの速度が遅いことに文句を言うことはなく、別の場所に移動します。最初から効率的なデータベース アクセスを計画することは、ビジネス上意味のあることです。
最初から効率を考慮しないことについての私の主な懸念の 1 つは、物事が遅すぎる最初の数回、企業はパフォーマンスの調整ではなく、問題により多くの機器を投入する傾向があるということです。人々がパフォーマンス アクネ チューニングを開始するまでに、数ギガバイト以上のデータベースがあり、結果よりも多くのタイムアウトを取得している多くの不幸な顧客がいます。この時点で、多くの場合、データベース内のほぼすべてを書き直す必要があり、その間に顧客を失います。ある企業で商用アプリケーションのサポートを提供していたのを覚えています。顧客サービス担当者が電話ですでに不満を抱いている顧客を助けようとしているときに、ある画面から別の画面に移動するのに文字通り 10 分かかりました。