- PR -

SQLの性能

投稿者投稿内容
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-07-07 20:58
引用:

ハニワ祭りさんの書き込み (2006-07-07 20:46) より:
出力したいデータがユーザーによって選択されたら
それをバッチクエリで一時テーブルに出力して、



SQL Server2000では、TEMPORARY TABLEは作れないと思うんですが、
「SELECT INTO #一時表 」でないと無理ですよね?
それとも、CREATE TABLEして、そこへINSERTするんでしょうか?
もう少し具体的な方法を教えてもらえませんか?
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2006-07-07 21:15
CREATE TABLE #一時表
(
KEY_CD char(10)
)
といった具合につくれますが…?
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2006-07-07 21:19
http://www.atmarkit.co.jp/fnetwork/rensai/sql22/sql1.html
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-07-08 10:07
引用:

ハニワ祭りさんの書き込み (2006-07-07 21:15) より:
CREATE TABLE #一時表
(
KEY_CD char(10)
)
といった具合につくれますが…?



知識不足ですいません。
作ったテーブルへクライアントプログラムでINSERTするんですよね?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-07-08 11:31
毎々お世話になっております。

引用:

NEOさんの書き込み (2006-07-08 10:07) より:

知識不足ですいません。
作ったテーブルへクライアントプログラムでINSERTするんですよね?


作るのも INSERT も、同じプログラム上どころか、同じセッションからでないとダメです。
ローカル一時テーブルは、同一セッションでないと見ることができません。
グローバル一時テーブルを使えば、別セッションからでも見れますが、意味がありません。

そんなことより、platini さんのリンク先はご覧になっているのでしょうか...?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-07-08 11:38
引用:

そんなことより、platini さんのリンク先はご覧になっているのでしょうか...?



見ましたけど、ピンと来ないんです。
何をするストアドを作ればよいのか・・・。
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2006-07-08 13:01
今回のケースでストアドを使うのであれば、
パラメータ数(ユーザーが選択したコード)が不定のため、
一時テーブルは不向きで、あらかじめパーマネントテーブル用意しておいて
ワークテーブルとして使う必要があるかと思います。

ただしワークテーブルの第一キーを一意になるIDを設定(たとえば端末名やユーザーIDなど)して排他する必要があります。(第二キーにユーザーが選択したコード)

また、データ残ってしまう場合の後始末などを考えると少々手間がかかり
複雑になりますが、10個(ワークを含め11個?)のテーブルを結合する
メインのSQLがキャッシュできるので、そのほうが結果的にはいいかも知れません。




[ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2006-07-08 13:15 ]
NEO
大ベテラン
会議室デビュー日: 2005/10/02
投稿数: 104
投稿日時: 2006-07-08 13:43
引用:

ハニワ祭りさんの書き込み (2006-07-08 13:01) より:
今回のケースでストアドを使うのであれば、
パラメータ数(ユーザーが選択したコード)が不定のため、
一時テーブルは不向きで、あらかじめパーマネントテーブル用意しておいて
ワークテーブルとして使う必要があるかと思います。

ただしワークテーブルの第一キーを一意になるIDを設定(たとえば端末名やユーザーIDなど)して排他する必要があります。(第二キーにユーザーが選択したコード)

また、データ残ってしまう場合の後始末などを考えると少々手間がかかり
複雑になりますが、10個(ワークを含め11個?)のテーブルを結合する
メインのSQLがキャッシュできるので、そのほうが結果的にはいいかも知れません。



やはり、ワークテーブルにINSERT(今回の場合なら7000件)する方が速いということでしょうか?

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