前提・実現したいこと
以下SQLのLEFTJOINしている箇所を見直したいです。
良い書き方があればご教授いただきたいです。
「処理速度遅延の原因の1つと思っています」
根拠は?
せめて実行プランがどうなっているのかぐらい提示しよう。
チューニングには緻密さが必要です。
インデックスはもとより、SQLでのwhere条件、結合条件だけでなくorder byやselect項目も関係しますので、質問にあたり実名を避けるのは良いのですが、適当に割愛したりすると意味がありません。
チューニングに対して有用なアドバイスを受ける為には、SQL+実行計画+テーブル定義の情報を提示する必要があります。
gentaro様
お返事頂きありがとうございます。
ご指摘の通り、根拠はありません。
実行計画を取得し、提示するようにいたします。
sazi様
お返事頂きありがとうございます。
ご指摘の通りです。わざわざご教授頂きありがとうございました。
まずは、省略していたSQLを、省略せずにすべて記載させていただきました。
根本原因はD_Kinmuhyoが正規化されていない事のようですが、テーブルのデザインの変更は出来ないのですか?
sazi様
ご確認頂きありがとうございます。
テーブルデザインの変更は出来ません。
テーブル設計は現状のまま、改善出来ないか検討しております。
そうですか。では後は実行計画とテーブル定義(インデックス含む)ですね。
尚、追記する際は、以下の様に```で括ってください。
```
(SQL)
```
まずは、以下を本文に記載しました。
・「XXXX_TBL」のテーブルレイアウト
・上記SQL実行時の実行計画
「D_Kinmuhyo」についてはテーブル定義書が存在しないため、確認中です。
また、このテーブルは上位システムのテーブルらしく、定義の変更は出来ないそうです。
満足に情報の提供すら出来ておらず、大変申し訳ございません。
また「```」を使用すると、画像が張れなかったので、
線で区切らせて頂きました。
別に定義書でなくてもDBツールなどでDDL文を取得して追記すれば良いかと思います。
実行計画も画像よりはテキストの方が見やすいかと思います。
SQL Server Management Studio の知っておいたほうが良い機能について挙げてみる - その3 - ( 実行プランのテキスト表示 )
https://ryuchan.hatenablog.com/entry/2013/09/27/215314
それから、ストアド全体の実行計画ではなく、問題個所のSQLに対しての実行計画にして下さい。
※結果的に抽出されない条件での実行計画は無意味ですので、コストが掛かっているものにして下さい。
> このテーブルは上位システムのテーブルらしく、定義の変更は出来ないそうです。
因みに、デザイン変更は出来なくても、インデックスの追加は可能なのですよね?
インデックスの変更が出来ないとしたら、一時テーブル作成して対応する等が必要になりますが、それも対象のデータ量が大きすぎる場合は、相殺されて意味が無い事になります。
「上位システムのテーブル」なら正規化されていない事に対応するためのアクセスパターンなどが提示されたりしていないでしょうか。
「上位」ではなくて他システムという事ならそういった情報の提示はないでしょうけど。
>別に定義書でなくてもDBツールなどでDDL文を取得して追記すれば良いかと思います。
>それから、ストアド全体の実行計画ではなく、問題個所のSQLに対しての実行計画にして下さい。
>※結果的に抽出されない条件での実行計画は無意味ですので、コストが掛かっているものにして下さい。
ご教授頂きありがとうございます。
上記の通り対応させて頂きましたので、ご確認頂けますでしょうか。
>因みに、デザイン変更は出来なくても、インデックスの追加は可能なのですよね?
→依頼することは出来ますが、恐らく難しいです。
>インデックスの変更が出来ないとしたら、一時テーブル作成して対応する等が必要になりますが、それも対象のデータ量が大きすぎる場合は、相殺されて意味が無い事になります。
→「D_Kinmuhyo」には現時点で92,000レコード存在します。
1年あたり、3~4万件レコードが作成されるテーブルです。
また、ずっとデータを蓄積するため、データ量は増え続けます。
>「上位システムのテーブル」なら正規化されていない事に対応するためのアクセスパターンなどが提示されたりしていないでしょうか。
>「上位」ではなくて他システムという事ならそういった情報の提示はないでしょうけど。
申し訳ございません、他システムという言い方の方が正しいです。
その様な情報の提供はございません。
テキストを取得するようにお願いしましたのに、何故画像なのでしょうか。
D_KinmuhyoはViewですね。
View内で使用しているテーブルを直接使用すれば、効率は上がるのじゃないでしょうか。
細かいアドバイスを求めるなら、それらのテーブルの定義も追記した方が良いですね。
※内容は解析になるので、そこまでの回答があるかは期待しない方が良いと思います。
>テキストを取得するようにお願いしましたのに、何故画像なのでしょうか。
申し訳ございません。文字数の関係で記載しきれなかったためです。
大変失礼いたしました。
>細かいアドバイスを求めるなら、それらのテーブルの定義も追記した方が良いですね。
>※内容は解析になるので、そこまでの回答があるかは期待しない方が良いと思います。
承知いたしました。ありがとうございます。取り急ぎお礼まで。
> 文字数の関係で記載しきれなかったためです。
そういった場合、回答として情報提供するのが殆どです。
性能に関する切り分けとして、先ずは「XXXX_TBL」を結合しないSQLで性能が問題になるかを実行計画と共に確認してみてください。
あなたの回答
tips
プレビュー