次のようなレポートのデータを生成するアプリケーションがあります。
age < 30 | age >=30 | asian | hispanic
-----------------------------------------------------------------
clients in prog A | | |
-----------------------------------------------------------------
clients in prog B | | |
-----------------------------------------------------------------
number clients | | |
-----------------------------------------------------------------
number children | | |
クエリは非常に長くなる場合があり、最適化したいと考えています。
サーバー上でクエリ アナライザーを実行する権限がありません (そして、多くの場合、クエリ アナライザーの提案を使用しない方がよいと読みました)。最長の sproc の実行には約 35 秒かかります。
周りを読んで、高度なクエリ最適化のために避けるべきことは次のとおりです。
- 選択する *
- 存在する
- 明確
- カーソル
- 持つ
当面のタスクについていくつか質問があります。
- Select * を Select colA, colB ... に変更すると、どのくらいの違いが見られますか? それは本当に苦労する価値がありますか?
- if exists( ... ) を最適化するにはどうすればよいですか? if( Select Count(query ) > 0 ) は適切な最適化ですか?
- 本当にテーブル内のすべての列を返す場合、 Select * を使用しても問題ありませんか?
これらのクエリは非常に長くてひどいので投稿したくありませんが、他にどのような提案を提供できますか? 再利用可能な関数と一時テーブルを可能な限り使用して、脳とサーバーの両方の負担を軽減しようとしています。