- PR -

テーブルの結合方法2

投稿者投稿内容
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-03-28 13:19
引用:

ともこさんの書き込み (2008-03-28 10:49) より:
>カーニーさんより---------
>テーブルAからSELECTする前に、テーブルBの中身をキャッシュしとくとか。
>-------------------------
これってどういう意味なのでしょうか?ちょっと興味があるのでもう少し教えていただけないでしょうか?


単に、事前にテーブルBからSELECTした結果を、テンポラリテーブルとかテーブル型の変数にキャッシュしておいたらどうですか? という提案です。
その後テーブルAからコード値をSELECTしてきた時には、テーブルBにアクセスせずとも、対応するテキストをそっちで探せるじゃないですか。

もっとも、キャッシュする際には、後で高速アクセスできるようなデータ構造(ハッシュテーブルとかインデックス付きテーブルみたいなやつ)にしておく必要があるので、それをT-SQLでうまくできるかどうかは分かりません。
いくらメモリアクセスとは言っても、データ量とかアルゴリズムによっては全然メリットが出ないこともあるでしょう。
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2008-03-28 22:51
引用:

カーニーさんの書き込み (2008-03-28 13:19) より:
単に、事前にテーブルBからSELECTした結果を、テンポラリテーブルとかテーブル型の変数にキャッシュしておいたらどうですか? という提案です。
その後テーブルAからコード値をSELECTしてきた時には、テーブルBにアクセスせずとも、対応するテキストをそっちで探せるじゃないですか。

もっとも、キャッシュする際には、後で高速アクセスできるようなデータ構造(ハッシュテーブルとかインデックス付きテーブルみたいなやつ)にしておく必要があるので、それをT-SQLでうまくできるかどうかは分かりません。
いくらメモリアクセスとは言っても、データ量とかアルゴリズムによっては全然メリットが出ないこともあるでしょう




キャッシュを作っても結局同じように結合する訳ですが…
高速化が目的であれば、主キー有りのテーブル変数か、インデックス付の一時テーブルを
キャッシュとして利用するのが一般的だとおもいます。
まあ、そこまでして高速化する必要があるかどうかはデータ量や
結合するテーブル構成がある程度わからないと判断できません。
一見複雑に見えるSQLでも案外高速に動作することも多いので。


[ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-03-28 22:58 ]
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2008-04-02 08:25
カーニーさん、ハニワ祭りさん、アドバイスありがとうございます。
また返答が遅れてしまいすみません!

>ハニワ祭りさんのコメントより---------------------
>キャッシュを作っても結局同じように結合する訳ですが…
>高速化が目的であれば、主キー有りのテーブル変数か、インデックス付の一時テーブ>ルを
>キャッシュとして利用するのが一般的だとおもいます。
>まあ、そこまでして高速化する必要があるかどうかはデータ量や
>結合するテーブル構成がある程度わからないと判断できません。
>一見複雑に見えるSQLでも案外高速に動作することも多いので。
>-------------------------------------------------
ご説明頂いた内容でキャシュについてはイメージが沸きました。
「そこまでして高速化する必要があるかどうか」についてですが、確かに私が作成しているSQL文でも処理速度には問題はでていません。SQL文が長くなってしまうのはある程度仕方の無い部分かもしれませんね。

みなさんご親切なアドバイスありがとうございました、今後の開発に参考にさせて頂きます。
今後ともよろしくお願いします、失礼します。

スキルアップ/キャリアアップ(JOB@IT)