- - PR -
テーブルの結合方法2
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-03-28 13:19
単に、事前にテーブルBからSELECTした結果を、テンポラリテーブルとかテーブル型の変数にキャッシュしておいたらどうですか? という提案です。 その後テーブルAからコード値をSELECTしてきた時には、テーブルBにアクセスせずとも、対応するテキストをそっちで探せるじゃないですか。 もっとも、キャッシュする際には、後で高速アクセスできるようなデータ構造(ハッシュテーブルとかインデックス付きテーブルみたいなやつ)にしておく必要があるので、それをT-SQLでうまくできるかどうかは分かりません。 いくらメモリアクセスとは言っても、データ量とかアルゴリズムによっては全然メリットが出ないこともあるでしょう。 | ||||
|
投稿日時: 2008-03-28 22:51
キャッシュを作っても結局同じように結合する訳ですが… 高速化が目的であれば、主キー有りのテーブル変数か、インデックス付の一時テーブルを キャッシュとして利用するのが一般的だとおもいます。 まあ、そこまでして高速化する必要があるかどうかはデータ量や 結合するテーブル構成がある程度わからないと判断できません。 一見複雑に見えるSQLでも案外高速に動作することも多いので。 [ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-03-28 22:58 ] | ||||
|
投稿日時: 2008-04-02 08:25
カーニーさん、ハニワ祭りさん、アドバイスありがとうございます。
また返答が遅れてしまいすみません! >ハニワ祭りさんのコメントより--------------------- >キャッシュを作っても結局同じように結合する訳ですが… >高速化が目的であれば、主キー有りのテーブル変数か、インデックス付の一時テーブ>ルを >キャッシュとして利用するのが一般的だとおもいます。 >まあ、そこまでして高速化する必要があるかどうかはデータ量や >結合するテーブル構成がある程度わからないと判断できません。 >一見複雑に見えるSQLでも案外高速に動作することも多いので。 >------------------------------------------------- ご説明頂いた内容でキャシュについてはイメージが沸きました。 「そこまでして高速化する必要があるかどうか」についてですが、確かに私が作成しているSQL文でも処理速度には問題はでていません。SQL文が長くなってしまうのはある程度仕方の無い部分かもしれませんね。 みなさんご親切なアドバイスありがとうございました、今後の開発に参考にさせて頂きます。 今後ともよろしくお願いします、失礼します。 |