私の以前の仕事の1つで、私(他の3人のプログラマーと共に)は、約40人以上のプログラマーの実稼働に入る前に作成または更新されたすべてのストアドプロシージャをレビューする責任がありました。レビュアーとして、それは私の時間の本当のドラッグでしたが、多くの開発者がたまに間違いを犯すので、全体的にそれがまだ必要でした。本当に悪い(効率的な)SQLステートメントを書いたオフショアプログラマーがいて、彼らは完全に学習を拒否した(そのチームは最終的に閉鎖された)からです。
全体的に私たちは探しました:
- インデックスの使用-クエリはテーブル全体をスキャンしていましたか?
- 保守性-何かがハードコードされているため、数週間後にクエリを変更する必要がありましたか?クエリは読み取り可能ですか?
- 全体的な効率-内部結合を既存のものに置き換えることができますか?Withブロックを追加すると役立ちますか?
- ロックの問題-クエリはデータベースをロックし、更新の発生を防ぎますか?これは私が考えている以上に起こりました。
多くの場合、ほとんどのクエリに問題はなく、私たちはそれを推進しました。ただし、各レビューはクエリに応じて10分から2時間かかりました。私の一部は、いくつかのレポートが別のアプリケーションで問題を引き起こしていたため、恐ろしい午前2時の電話を防ぐことができたため、レビューをするというアイデアが気に入りました。しかし同時に、私たちはすべて大人であり、クエリを書いている人はすべて自分でやるべきだから、ちょっとやり過ぎだと思った。
複雑なクエリは標準のコードレビューの一部である必要があると思いますが、DBAを通過する必要はありません。また、単純なinsert / update / deleteステートメントを確認する必要もありません。さらに、クエリの作成者として、いつ複雑になりすぎたのか、いつDBAにレビューを依頼するのかを知っておく必要があります。
更新
私の最初の仕事では、すべてのクエリはDBAによって作成され、それが開発の大きな時間のキラーでした。必要なすべての列、列が配置されたテーブル、最後に検索条件を送信する必要がありました。基本的な挿入/更新/削除ステートメントでさえ、DBAを通過する必要がありました。最終的には、必要なSQLを記述し、それを見て必要な変更を加え、ストアドプロシージャをラップすることができるようになりましたが、そこには数年しかありませんでした。その特定の会社は最近の大学の卒業生をたくさん雇いました、そして、これは新しい人がパフォーマンスを殺したクエリを書かないことを保証した方法でした。