C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: SQLの速度アップについて


(過去ログ 126 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■75048 / inTopicNo.1)  SQLの速度アップについて
  
□投稿者/ 鏡月 (10回)-(2015/02/23(Mon) 11:57:33)

分類:[その他の言語] 

お世話になっております。鏡月と言うものです。

サンプルテーブル
USER
KIGOU_CODE01
KIGOU_CODE02
   ・
KIGOU_CODE29
KIGOU_CODE30

記号テーブル
KIGOU_CODE
KIGOU

上記二つのテーブルがありサンプルテーブルのKIGOU_CODE??(??は数値)が記号テーブルにあるKIGOUの文字を出力しようとしております。

SELECT
サンプルテーブル.USER
,記号テーブル01.KIGOU
,記号テーブル02.KIGOU
     ・
,記号テーブル29.KIGOU
,記号テーブル30.KIGOU
FROM サンプルテーブル
LEFT JOIN 記号テーブル AS 記号テーブル01
ON サンプルテーブル.KIGOU_CODE01 = 記号テーブル01.KIGOU_CODE
LEFT JOIN 記号テーブル AS 記号テーブル02
ON サンプルテーブル.KIGOU_CODE01 = 記号テーブル02.KIGOU_CODE

LEFT JOIN 記号テーブル AS 記号テーブル29
ON サンプルテーブル.KIGOU_CODE01 = 記号テーブル29.KIGOU_CODE
LEFT JOIN 記号テーブル AS 記号テーブル30
ON サンプルテーブル.KIGOU_CODE01 = 記号テーブル30.KIGOU_CODE

現在上記のSQLで抽出しているのですがSQLの結果を抽出するのがあまり早くありません。
こちらのSQLの抽出速度を上げる場合、どのようにすればよろしいでしょうか。
お手数お掛けしますがご教授下さい。
※・は省略と言う意味です。
引用返信 編集キー/
■75049 / inTopicNo.2)  Re[1]: SQLの速度アップについて
□投稿者/ WebSurfer (504回)-(2015/02/23(Mon) 13:53:57)
No75048 (鏡月 さん) に返信

DB サーバーは何ですか?

どのようにクエリをかけているのですか? アプリケーションからプロ
バイダ経由ですか? それとも DB 直接ですか?

「あまり早くありません」と主観的に言われると「我慢できる程度なら
我慢したら?」みたいな話になってしまいそうです。根本的に、テーブ
ルの構成の見直し、DB の再構築などまで行って改善したいのか、クエリ
をチョコチョコっと見直す程度のことで改善したいのか、そのあたりは
どうなんでしょう?
引用返信 編集キー/
■75050 / inTopicNo.3)  Re[2]: SQLの速度アップについて
□投稿者/ PANG2 (63回)-(2015/02/23(Mon) 14:17:23)
速くなるか分からないがSQLをいじってみる。

SELECT
	USER,
	(SELECT KIGOU FROM 記号テーブル WHERE KIGOU_CODE = KIGOU_CODE01) AS KIGOU01,
	(SELECT KIGOU FROM 記号テーブル WHERE KIGOU_CODE = KIGOU_CODE02) AS KIGOU02,
	 ・
FROM
	サンプルテーブル


さらに、記号テーブルの部分をストアドファンクション化する。

引用返信 編集キー/
■75052 / inTopicNo.4)  Re[2]: SQLの速度アップについて
□投稿者/ 鏡月 (11回)-(2015/02/23(Mon) 15:27:22)
No75049 (WebSurfer さん) に返信
> DB サーバーは何ですか?
→DBサーバーはSQL Server2008 r2を使用しております。

>
> どのようにクエリをかけているのですか? アプリケーションからプロ
> バイダ経由ですか? それとも DB 直接ですか?
→Oracle SQL Developerを使用してそこでSQLを流しております。

> 「あまり早くありません」と主観的に言われると「我慢できる程度なら
> 我慢したら?」みたいな話になってしまいそうです。根本的に、テーブ
> ルの構成の見直し、DB の再構築などまで行って改善したいのか、クエリ
> をチョコチョコっと見直す程度のことで改善したいのか、そのあたりは
> どうなんでしょう?
→SQL文のみを変更し、速度アップを行いたいと考えております。

質問時に情報が抜けてしまい申し訳ございませんでした。

引用返信 編集キー/
■75053 / inTopicNo.5)  Re[3]: SQLの速度アップについて
□投稿者/ 鏡月 (12回)-(2015/02/23(Mon) 15:44:25)
DBサーバーはORACLE11gを使用しております
引用返信 編集キー/
■75054 / inTopicNo.6)  Re[3]: SQLの速度アップについて
□投稿者/ 鏡月 (13回)-(2015/02/23(Mon) 15:46:21)
No75050 (PANG2 さん) に返信
> 速くなるか分からないがSQLをいじってみる。
>
> SELECT
> USER,
> (SELECT KIGOU FROM 記号テーブル WHERE KIGOU_CODE = KIGOU_CODE01) AS KIGOU01,
> (SELECT KIGOU FROM 記号テーブル WHERE KIGOU_CODE = KIGOU_CODE02) AS KIGOU02,
>  ・
> FROM
> サンプルテーブル
>
>
> さらに、記号テーブルの部分をストアドファンクション化する
→上記SQLのストアドファンクション化について分からなかったのですが
 とりあえず記載されているようなSQLを流しました処、速度は遅くなったと感じられます。

引用返信 編集キー/
■75055 / inTopicNo.7)  Re[4]: SQLの速度アップについて
□投稿者/ shu (694回)-(2015/02/23(Mon) 16:33:12)
No75053 (鏡月 さん) に返信

記号テーブルのレコード数にもよると思いますが

サンプルテーブルと記号テーブルを別でセレクトして
処理する側でサンプルテーブルの各項目に対応する内容を
設定してみるのはどうでしょう?

引用返信 編集キー/
■75056 / inTopicNo.8)  Re[5]: SQLの速度アップについて
□投稿者/ 鏡月 (14回)-(2015/02/23(Mon) 16:40:57)
No75055 (shu さん) に返信
> ■No75053 (鏡月 さん) に返信
>
> 記号テーブルのレコード数にもよると思いますが
>
> サンプルテーブルと記号テーブルを別でセレクトして
> 処理する側でサンプルテーブルの各項目に対応する内容を
> 設定してみるのはどうでしょう?
→shuさん回答ありがとうございます。
 いまいちやり方が分からないのでサンプルが記載されているURL等を教えて頂くことは可能でしょうか。
引用返信 編集キー/
■75057 / inTopicNo.9)  Re[6]: SQLの速度アップについて
□投稿者/ shu (695回)-(2015/02/23(Mon) 17:06:41)
No75056 (鏡月 さん) に返信

> いまいちやり方が分からないのでサンプルが記載されているURL等を教えて頂くことは可能でしょうか。
処理を何で(言語、使用しているクラスなど)で行っているかわからないと
それぞれやり方が変わるので難しいです。


今取得処理を行っているやり方で2つのテーブルを別々に取得します。
サンプルの方をループで1件づつ処理します。
1件の処理で各記号コードについて記号テーブルのメモリ内テーブルを検索して該当データを取得します。


.NetならDataTableを使用したメモリ内テーブルを作成出来るのでそれを使うとよいです。
その他の言語でもコードと名称の対応付けするようなものは用意されていると思うのでそういうものを使うと
よいと思います。

引用返信 編集キー/
■75059 / inTopicNo.10)  Re[7]: SQLの速度アップについて
□投稿者/ 鏡月 (15回)-(2015/02/23(Mon) 17:29:50)
No75057 (shu さん) に返信
> 処理を何で(言語、使用しているクラスなど)で行っているかわからないと
> それぞれやり方が変わるので難しいです。
→SQL Developer等のデータベース開発ツールで簡易的にSQLを流して確認する方法はないということでしょうか。

> 今取得処理を行っているやり方で2つのテーブルを別々に取得します。
> サンプルの方をループで1件づつ処理します。
> 1件の処理で各記号コードについて記号テーブルのメモリ内テーブルを検索して該当データを取得します。
>
>
> .NetならDataTableを使用したメモリ内テーブルを作成出来るのでそれを使うとよいです。
> その他の言語でもコードと名称の対応付けするようなものは用意されていると思うのでそういうものを使うと
> よいと思います。
→最終的には.NETでSQL文を取得する予定なのですが『サンプルの方をループで1件づつ処理します。』とはどうゆうことでしょうか。
 無知な質問になってしまい大変申し訳ございません。
引用返信 編集キー/
■75061 / inTopicNo.11)  Re[8]: SQLの速度アップについて
□投稿者/ shu (696回)-(2015/02/23(Mon) 17:58:55)
No75059 (鏡月 さん) に返信
> ■No75057 (shu さん) に返信
>>処理を何で(言語、使用しているクラスなど)で行っているかわからないと
>>それぞれやり方が変わるので難しいです。
> →SQL Developer等のデータベース開発ツールで簡易的にSQLを流して確認する方法はないということでしょうか。
>

SQL DeveloperでSelect時間を見積もっているのでしょうか?
だとしたら サンプルテーブル、記号テーブルをそれぞれSelectした時間の合計+多少の処理時間で見積もるとよいかと思います。



>>
>>.NetならDataTableを使用したメモリ内テーブルを作成出来るのでそれを使うとよいです。
>>その他の言語でもコードと名称の対応付けするようなものは用意されていると思うのでそういうものを使うと
>>よいと思います。
> →最終的には.NETでSQL文を取得する予定なのですが『サンプルの方をループで1件づつ処理します。』とはどうゆうことでしょうか。
>  無知な質問になってしまい大変申し訳ございません。
これが前提なら.NetでのSQLアクセスについて調べておいた方がよいと思います。
関連しそうなのはDataAdapterとかDataReaderあたりでしょうか。





引用返信 編集キー/
■75063 / inTopicNo.12)  Re[9]: SQLの速度アップについて
□投稿者/ 鏡月 (16回)-(2015/02/23(Mon) 18:17:53)
No75061 (shu さん) に返信
> SQL DeveloperでSelect時間を見積もっているのでしょうか?
> だとしたら サンプルテーブル、記号テーブルをそれぞれSelectした時間の合計+多少の処理時間で見積もるとよいかと思います。
→SQL DeveloperでSelect時間を見積もっています。
 上記を目安にしてみたいと時間の算出を行いたい思います。

> これが前提なら.NetでのSQLアクセスについて調べておいた方がよいと思います。
> 関連しそうなのはDataAdapterとかDataReaderあたりでしょうか。
→少し考えてからやってみようと思います。
 ありがとうございました。
解決済み
引用返信 編集キー/
■75082 / inTopicNo.13)  Re[10]: SQLの速度アップについて
□投稿者/ ミーシャ (1回)-(2015/02/25(Wed) 13:18:30)
LEFT JOINを30回も行えば、それは遅くなりますよ。
記号テーブルのKIGOUの内容をどのように利用するかによって対応法は異なりそうですが、
どのようなことをやりたいのでしょうか?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -