先日、PL/SQLの開発について、こんな質問を受けました。
「SQLを組むさい、処理速度を速めるためにやっていることは?」
と。

で、ちょっと考えて
「Selectなら、Indexを考慮してSelect文を作成し、実行します。
処理時間がかかる場合は、実行計画などをみて、
Select文にヒント句をつけて、処理速度を改善します。」

と答えました。

答えたあと、質問者された方は、なんだかがっかりした感じでしたが、
私の回答は不適切だったのでしょうか?

それとも、どういう回答が良かったのでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> Indexを考慮して



どのようにというのが欲しかったのかもしれませんね。
例を出して説明してあげるとか。

例えば、列に関数を適用すると索引が使われないとかあるじゃないですか。
    • good
    • 0
この回答へのお礼

そういうことですか!
確かに、そういう回答が出来ていたら、もうちょっと会話も弾んだかもしれません。

私の言葉足らずだったのですね。

とりあえず、お門違いではないって事がわかり安心しました。

お礼日時:2011/04/19 11:27

至極まっとうな回答だと思いますよ。

    • good
    • 0
この回答へのお礼

ありがとうございます。
そういっていただけて、安心しました。

お礼日時:2011/04/19 11:26

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QNTT東日本光ファミリーハイスピードタイプの平均速度について

NTT東日本光ファミリーハイスピードタイプの平均速度について
今月ADSLから光ファミリーハイスピードに変更してADSLより断然早いのですが
NTTのページには最大下りが200Mbpsで上りは100Mbpsと書いてあったので
測定した所NTTのフレッツ速度測定(iPv4)サイトで測定した所
下り速度が93Mbps~94Mbpsだったので価格.comでも測定した所
下り24.3Mbps上り20.5Mbpsでした。
パソコンの中に入っているハードウェアのネットワーク アダプタ
はBroadcom400×10/100Integrated Controllerなので100Mbpsまでしか
対応していない可能性がありますが速度的には平均でしょうか?
またパソコンを最新のセブンにすればもっと最大限の速度になりますか?

Aベストアンサー

今のPC(NIC)では100Mが最大です。
フレッツスクゥエアの94Mがほぼ理論値でしょう。
(てかそんなに出るだ ちょっとうらやましいかも)
フレッツスクゥエアはインターネットではなく、
NTT東のフレッツ網という閉じた世界です。
なので比較的速度がでます。(NTT東がそう設計しているので)
価格.comのサイトは文字通りインターネットの世界なので
まあ そんなもんかなと思います。
特段 用途がなければPCはそのままでいいでしょう。
インターネットの世界が混んでいるのでPCやフレッツだけが
早くてもね・・
ただ 家族で複数台同時アクセスをするのなら下り200Mが有効でしょう。
なんせ価格.comのサイトに9台くらいアクセスできる回線能力はあるので・・

Q【PL/SQL】SQL文が長すぎてSELECTできない

oracle9iのpl/sqlでSELECT文を発行し
取得したカーソルを返す処理をしています。


where句が動的になる為
実行するSQL文が長くなり
ORA-06502: PL/SQL: 数値または値のエラー:
文字列バッファが小さすぎます。が発生しました
のエラーが発生します。

そこで、SQL文の部分をCLOB型にしたり
SQL文を「||」でつなげたり
してみましたが、どちらもエラーになりました。

長すぎるSQL文を実行するには
どうしたらよいでしょうか?


以下ソースです。(左側の数字は行数です)
-----------------------------------
1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS
2 TYPE curType IS REF CURSOR;
3 tmpCur curType;
4 sqlStrVARCHAR2(32767);
5
6
7 BEGIN
8
9 sqlStr := 'SELECT '
10 sqlStr := sqlStr || 'A,B '
11 sqlStr := sqlStr || 'FROM'
<<省略>>


12 OPEN tmpCur FOR sqlStr←エラー発生
13O_カーソル := tmpCur;--取得したカーソルを返す

14 END テスト;
-----------------------------------
(1)SQL文をCLOB型にしてみる:コンパイルエラー
4 sqlStrCLOB

(2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー
Dim sqlStr1VARCHAR2(32767);
Dim sqlStr2VARCHAR2(32767);
Dim sqlStr3VARCHAR2(32767);
<<省略>>


12 OPEN tmpCur FOR
(sqlStr1
     || sqlStr2
     || sqlStr3
<<省略>>
)

oracle9iのpl/sqlでSELECT文を発行し
取得したカーソルを返す処理をしています。


where句が動的になる為
実行するSQL文が長くなり
ORA-06502: PL/SQL: 数値または値のエラー:
文字列バッファが小さすぎます。が発生しました
のエラーが発生します。

そこで、SQL文の部分をCLOB型にしたり
SQL文を「||」でつなげたり
してみましたが、どちらもエラーになりました。

長すぎるSQL文を実行するには
どうしたらよいでしょうか?


以下ソースです。(左側の数字は行数です)
--------------------...続きを読む

Aベストアンサー

残念ですが、9iであればDBMS_SQLを使うしかないでしょう。

QNTT西 フレッツで 速度がでません。もうダメです

NTT西 フレッツマンションタイプ(vdsl)です。私のマンションでは他に1戸しかNTT光と契約していません。

しかし、私の環境では6Mほどしか速度が出ず、NTTの人を呼んだところ、彼らのPCでは60Mでました。ちょうど10分の1です。

「お宅のパソコンが悪いんで適当に直したらいけます」と言われ、そそくさと帰ってしまいました。それでeditMTUなどでMTUとRWINの値を変更したのですが、全く効果がありません。設定できているかもわからなくなってきました。

以前はケーブルで繋いでいましたが、いまよりかは速かったです。
何が悪いのでしょう。NTTの人のPCと私のPCとで、速度がちょうど10分の1というのも気がかりです。

よろしくお願いします。

CPU:Athron64 3500
メモリ:バルク品 1G(他アプリでは特に問題ないメモリです
XP sp2です。

Aベストアンサー

#4です。
同じツールを使って、速度が違うと言うことは、PCの環境が違うと言うことですね。
何がボトルネックになっているかと言うのは、詳しく環境を教えていただかないと、ちょっと分かりません。
NTTの工事関係者のPCは、ハイスペックなPCを使っていません。
富士通やNECなどの一般の人が購入するものと同じ市販モデルを使用して、なおかつチューニングなどは一切していない仕様ですので、この場合、NTTがインチキをしているとは考えられません。

まず、質問者様の環境を詳細に教えてください。
・パソコンはメーカー製か自作か?
・LANボードは100MB対応のものか?
・LANボードのデバイスドライバーは正常に動作しているか?
・セキュリティソフトは何が入っているか?
・WindowsXP SP2のWindowsファイヤーウォールは有効になっているかなっていないか。
・NTT計測時の接続と、現在の接続は配線的に同じか、それとも同じでないか。(例えばNTTは回線に直結だったが、現在はルーターを介している等)

補足をお願いします。

Q【PL/SQL】CURSOR ・・・ IS SELECT・・・FOR UPDATE が機能しない

カーソルの宣言で、FOR UPDATE を指定しているのに、
WHERE CURRENT OF での更新が効きません。
エラーは発生せず、全件分ループも回っているのですが、値がまったく書き換わっていません。

Oracle Ver. = Oracle8i Release 8.1.6.0.0

CREATE OR REPLACE FUNCTION TEST_FNC
RETURN BOOLEAN
IS
todofu_cd NUMBER(2) := 0;
strSQL VARCHAR2(2000) := '';
CURSOR cur IS SELECT * FROM TEST_TBL FOR UPDATE;
BEGIN

For cur_rec In cur Loop

DECLARE
BEGIN
SELECT TODOFU_CD INTO todofu_cd
FROM M_POST
WHERE POST_NO = cur_rec.POST_NO;
EXCEPTION
When NO_DATA_FOUND Then
todofu_cd := 0;
END;

UPDATE TEST_TBL
SET TODOFU_CD = todofu_cd
WHERE CURRENT OF cur;
COMMIT;

End Loop;

EXCEPTION
 (省略)
END;
/

「CURSOR cur IS SELECT * FROM TEST_TBL FOR UPDATE;」の部分は、
「CURSOR cur IS SELECT POST_NO, TODOFU_CD FROM TEST_TBL FOR UPDATE OF TODOFU_CD;
」と記述しても結果は同じでした。

上書きしようとしている値である「todofu_cd」にきちんと望む値が格納されていること、ループが正常に回り、各行にアクセスしていることは、確認済です。

原因が分かる方がいらっしゃいましたらご教授下さい。
また、質問の内容に不備があるようでしたら、ご指摘下さい。
以上、どうかよろしくお願い致します。

カーソルの宣言で、FOR UPDATE を指定しているのに、
WHERE CURRENT OF での更新が効きません。
エラーは発生せず、全件分ループも回っているのですが、値がまったく書き換わっていません。

Oracle Ver. = Oracle8i Release 8.1.6.0.0

CREATE OR REPLACE FUNCTION TEST_FNC
RETURN BOOLEAN
IS
todofu_cd NUMBER(2) := 0;
strSQL VARCHAR2(2000) := '';
CURSOR cur IS SELECT * FROM TEST_TBL FOR UPDATE;
BEGIN

For cur_rec In cur Loop

DECLARE
BEGIN
SELECT TODOF...続きを読む

Aベストアンサー

明らかにダメなところとしては・・
コミットが書いてあることですかね。


update TEST_TBL x
set TODOFU_CD=(select y.TODOFU_CD from M_POST y where y.POST_NO=x.POST_NO);
update TEST_TBL set TODOFU_CD=0 where TODOFU_CD is null;

の2文で書いてはダメなんでしょうかね?
(件数が多すぎる?)

QNTT西日本フレッツADSLモア24の極端な速度低下

NTT西日本のフレッツADSLモア24、プロバイダーはOCNでインターネットをしています。
今日、通信速度が非常に低下している事に気が付きました。
普段はスピードテストで平均7M前後のスピードが出ているのですが、本日は450kb~1Mの間をウロウロしています。
NTT西日本のIPカスタマーサポートやOCNのサポートに電話してみたのですが、異常無しとの回答でした。
配線関係も全然いじっていませんし、OSやブラウザや接続の設定も変えていません。
マシンの不具合かと思い、サブマシン(Windows2000)で接続してみたのですが、やはり速度低下していました。
何故速度低下が起こったのでしょうか?
以下で通信環境と速度低下に際して行った対策を書いておきます。
なお、RWIN等のチューニングは嫌ですので、対策からは外しています。

-環境-
PC:富士通デスクパワーCE21WC/M
CPU:AMD Athlon2100+
メモリ:1GB
OS:WindowsXP Home SP1 Windows Update全適用
回線:NTT西日本フレッツADSLモア24
地域:広島県
線路長:500メートル
損失:10db
ADSLモデム:NTT ADSLモデムMS3<B>(モア24対応品)
スプリッタ:ADSLモデム添付品
プロバイダ:OCNフレッツプラン
セキュリティ:ノートンインターネットセキュリティ2003LiveUpdate全適用

-今までの対策-
・モデムの電源を落とし、しばらく休ませて、再度電源ON。
・取扱説明書通りに配線をやりなおし。
・プロバイダサポートよりPINGを打ってもらったが、反応は普通に返ってきた。
・ファイアウォールをオフにしてみたが、速度は変わらなかった。
・ADSLモデムの通信状況を見てみたが、モデムまでは速度が上り1100kb、下り8200kb来ている。
・Windows2000マシンで接続したが、速度はほぼ同じだった。
・フレッツスクエアのスピードテストも1Mを切る位の速度しか出なかった。

対策方法がありましたら、ご教示ください。

NTT西日本のフレッツADSLモア24、プロバイダーはOCNでインターネットをしています。
今日、通信速度が非常に低下している事に気が付きました。
普段はスピードテストで平均7M前後のスピードが出ているのですが、本日は450kb~1Mの間をウロウロしています。
NTT西日本のIPカスタマーサポートやOCNのサポートに電話してみたのですが、異常無しとの回答でした。
配線関係も全然いじっていませんし、OSやブラウザや接続の設定も変えていません。
マシンの不具合かと思い、サブマシン(Windows2000)で接続してみ...続きを読む

Aベストアンサー

24メガ契約、線路損失10dbで、下りリンク速度が8.2メガというのはおかしいです。

わたしの場合は12メガ、線路損失13dbで、下りリンク速度が10.6メガぐらいあります。

ADSLは、「アナログ技術」を使った通信方式です。つまり、外的要因を受けやすい回線です。
いくら線路損失が良い条件でも、周囲の「ノイズの影響」をもろに受けます。
※ただ、これらの影響を受け難いように設計はされていますが、極度に強いノイズは想定外です。

道路からのノイズや、収容局までの電話線は「ただの金属の細いはりがね」なので、あらゆるノイズがのりやすいです。
ご自宅の周囲に工場とか、大きな道路で渋滞も酷く自動車から出るノイズなどの影響があるような気もします。
また、その他、ご自宅のガス警報装置など、電話線に乗っている信号はないでしょうか。

また、モデムの設定がひょっとしたら、8メガ、12メガの設定になっている可能性もあります。
自動設定に頼らないで、「Annex I」になっていますか? 感じとして、Annex C規格で接続されている感じもします。

(24メガ対応のモデムは、1.5、8メガ、12メガ、24メガなど、最高速度で契約していれば、どの速度でも接続できるはずです)

24メガ契約、線路損失10dbで、下りリンク速度が8.2メガというのはおかしいです。

わたしの場合は12メガ、線路損失13dbで、下りリンク速度が10.6メガぐらいあります。

ADSLは、「アナログ技術」を使った通信方式です。つまり、外的要因を受けやすい回線です。
いくら線路損失が良い条件でも、周囲の「ノイズの影響」をもろに受けます。
※ただ、これらの影響を受け難いように設計はされていますが、極度に強いノイズは想定外です。

道路からのノイズや、収容局までの電話線は「ただの金属の細いはりがね...続きを読む

QSQLの処理速度改善にむけて

処理速度改善に向けて、3つ質問があります。
解答は1つでも良いのでお願いします。

1.検索条件が複数ある場合、もっとも絞れる物から検索するのが早いのでしょうか?
  (Indexはその順番に伴い変更する事を前提)

  例:
where
X = 3 (1000件中10件に絞れる)
and Y = 4 (1000件中100件に絞れる)
and Z = 5 (1000件中900件に絞れる)

上記のように、より絞れる物から検索する。

2.文字列で検索する場合、以下は同じ結果でしょうか。そしてパターン2の方が早いでしょうか
  ・パターン1
  where X <> 'Z'
・パターン2
  where X > 'Z' and X < 'Z'

3.条件式にTO_CHARが入った場合、indexカラムの場合、遅くなるでしょうか?
  下記SQLを直すとした場合、どのように直せるでしょうか?

SELECT * from X,Y
where TO_CHAR(X.DATE,'YYYYMM') = Y.DATE2(+)

処理速度改善に向けて、3つ質問があります。
解答は1つでも良いのでお願いします。

1.検索条件が複数ある場合、もっとも絞れる物から検索するのが早いのでしょうか?
  (Indexはその順番に伴い変更する事を前提)

  例:
where
X = 3 (1000件中10件に絞れる)
and Y = 4 (1000件中100件に絞れる)
and Z = 5 (1000件中900件に絞れる)

上記のように、より絞れる物から検索する。

2.文字列で検索する場合、以下は同じ結果でしょうか。そしてパター...続きを読む

Aベストアンサー

> 1.検索条件が複数ある場合、もっとも絞れる物から検索するのが早いのでしょうか?
記述の順序には関係ありません。どれか一項目に絞るなら「X」に索引を貼るのが有効です。

> 2.文字列で検索する場合、以下は同じ結果でしょうか。そしてパターン2の方が早いでしょうか
そもそも「X <> 'Z'」と「X > 'Z' and X < 'Z'」は同一条件ではありません。後者は常にFALSEです。

> 3.条件式にTO_CHARが入った場合、indexカラムの場合、遅くなるでしょうか?
一般的に関数を用いた項目については索引を使用しません。
しかし、
SELECT * from X,Y
where TO_CHAR(X.DATE,'YYYYMM') = Y.DATE2(+)
とは
SELECT * FROM X LEFT JOIN Y ON TO_CHAR(X.DATE,'YYYYMM') = Y.DATE2
の意味ですから、X側のレコードは索引の有無に限らず全件アクセスされます。
逆にYのDATE2に索引があれば高速化できる余地があります。

QNTTフレッツ光+BB.excite(プロバイダ)の通信速度アップ!!!・・したい。

NTTのフレッツ光プロバイダパックでBB.exciteをプロバイダとして申し込み、Bフレッツが開通しましたが、通信速度が出ません。

測定サイト http://speedtest.excite.co.jp/ v1.22
測定時刻 2006/03/04 22:28:23
ホスト名/IPアドレス 254.15.138.58.dy.bbexcite.jp/58.138.15.254
プロバイダ/回線/地域 BB.excite/Bフレッツ ハイパーファミリータイプ/北海道
推定最大ダウンロード速度 1.03Mbps(131kB/s)
推定最大アップロード速度 11.73Mbps(1501kB/s)
測定品質 1.10

上記の通りです。100Mbpsはでないのは理解していますが、職場のADSL8M(ぷらら)でも下り6Mbps出ています。
MTU,RWINの設定も色々試しましたが、思うように通信速度がでません。何をどのようにしたら、通信速度が上がるのか教えてください。

・NTTフレッツ光
・住所:北海道登別市
・OS:WINDOWS XP Pro SP2
・cpu:Celeron 1.4GHz
・メモリ:752MB RAM

以上、宜しくお願い致します。

NTTのフレッツ光プロバイダパックでBB.exciteをプロバイダとして申し込み、Bフレッツが開通しましたが、通信速度が出ません。

測定サイト http://speedtest.excite.co.jp/ v1.22
測定時刻 2006/03/04 22:28:23
ホスト名/IPアドレス 254.15.138.58.dy.bbexcite.jp/58.138.15.254
プロバイダ/回線/地域 BB.excite/Bフレッツ ハイパーファミリータイプ/北海道
推定最大ダウンロード速度 1.03Mbps(131kB/s)
推定最大アップロード速度 11.73Mbps(1501kB/s)
測定品質 1.10

上記の通りです。100Mbpsはでない...続きを読む

Aベストアンサー

こんにちは、私は神奈川に住んでおりますが、ハイパーファミリーにbb.exciteをプロバイダにして使っております。
少し突っかかる部分があるので、ひとつ質問させてください、
ONU(NTTと書いたもので、穴がボツボツあるもの)からLANケーブルを直接パソコン本体につないでおられますか?
もしその接続方法でつないでおるのであれば、ルーターの購入を推奨します、
(フレッツ接続ツールなどを使っている)
これはなぜかというと、Bフレッツの通信方式でPPPoEというものを使っており
ロースペックなコンピューターではこの処理がとても過負荷となりどうしても速度がでません。
しかしそのPPPoEをルーターを介すと、ルーターで処理するためにコンピューターの処理が楽になり速度が上がります。
私的にはBUFFALOのBBR-4HGなんかが購入しやすい(5千円でお釣がくる)し、
性能も良いと思います(実際今現在使ってます)
その程度のスペックであれば状態がよければ下り80Mほど出るでしょう。
あと、測定サイトなのですがそちらも変えたほうがよろしいでしょう。
今、フレッツスクエアの枠内測定では下り85.60Mbpsほどでており
プロバイダ経由で他のサイトで測定しても下り71.14Mbps に上り26.91Mbpsと出ますが
ZULさんが使ったサイトで測定しますと、
推定最大ダウンロード速度 16.12Mbps(2063kB/s)
推定最大アップロード速度 26.21Mbps(3354kB/s)
測定品質 1.00
とでます、なので一度別なサイトで測定を推奨します。

参考URL:http://netspeed-tokyo.studio-radish.com/index.html

こんにちは、私は神奈川に住んでおりますが、ハイパーファミリーにbb.exciteをプロバイダにして使っております。
少し突っかかる部分があるので、ひとつ質問させてください、
ONU(NTTと書いたもので、穴がボツボツあるもの)からLANケーブルを直接パソコン本体につないでおられますか?
もしその接続方法でつないでおるのであれば、ルーターの購入を推奨します、
(フレッツ接続ツールなどを使っている)
これはなぜかというと、Bフレッツの通信方式でPPPoEというものを使っており
ロースペックなコンピュータ...続きを読む

QSQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。

イメージ
sqlplus scott/tiger << EOF
  declare
    aaa number;
  begin
    -- *1
    select col1 into aaa from test1;
  end;
  /

  -- *2
  define a=1
  define b=1
  @test.sql
EOF


ここで*1にて例えば複数行が返ってくるなどのエラーが
発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが
どのようにすればよいかわかりますでしょうか。

whenever sqlerror exit 255

などはPL/SQL内の論理エラーはハンドリングしてくれないようです。

よろしくお願いします。

それかdefineや@マーク指定によるsqlファイルの取り込みを
PL/SQLの中で実行できる方法を教えていただく方法でも
当方が実施したいことはできるのでそれでもかまいません。

Aベストアンサー

SQLPLUSで投入したPL/SQL無名ブロック内でのエラーでも、「whenever sqlerror ~」で、
キャッチできますよ。少なくともWindows版SQLPUSは、そういう動作です。
発生源が、SQL文であっても、PL/SQL無名ブロックでも、ORA-nnnnnのエラーを拾わないと
「whenever sqlerror ~」の意味が無いですからね。

QNTTで “リセット” ? 速度が出ました。

フレッツADSL1.5Mを使っているのですが 速度を計測致しますと約70kbpsほどしか出ないため NTTに問い合わせましたところ
「では こちらで再起動いたします。」とおっしゃいました。
で、その後測定しなおしましたら 1.2Mbpsでたのです。
NTTの方に「再起動って何ですか?」と質問しましたら 
「こちらにあります機械のリセットボタンを押すようなものです。」とのお答え・・ 素人の私にわかりやすく説明して下さったのだと思います。
取り合えず速度が出るようになったので そのまま電話を切ってしまったのですが 電話を切ってから “再起動”やら“リセット”やらという単語が気になってしかたがありません。
いったいNTTでは どのような操作をされたのでしょうか?
ご存知の方がおられましたら 教えて下さいませ。
宜しく御願い致します。

Aベストアンサー

NTTには各顧客の回線のADSL接続用に装置があります。ADSLの工事というのはここに接続できるようにするものです。
この装置はそれぞれの回線用に専門の部分があります。これをいったん電源を切断して再度本回線(つまりインターネットに接続する部分)に接続し直す作業をしたのでしょう。
うちではここのリセットだけではうまくいかなくて設定を変えてもらって速度がでるようになりました。

QPL/SQL開発環境について

こんにちは。PL/SQLにて開発を行っています。シェアウエアでも、フリーでも良いのですが、お勧めの開発支援ツールを教えて頂けますでしょうか? 宜しくお願い致します。

Aベストアンサー

主に開発に使われるなら..
アンカーシステム社の「PL/SQL Developer」がお勧めです。
http://www.vector.co.jp/soft/win95/business/se257394.html

システムインテグレータ社の「Object Browser」は開発より管理向きのような気がします。

現在、2つのソフトを利用していますが、どちらかと言えば、PL/SQL developerの方が
立ち上げている時間は長いカンジです。

なお、バグに関しては、どちらのソフトもそれなりにあったりしますが、どちらのサポートも
しっかりしているカンジですし、改修も割と早い方だと思います。

参考までに、オイラは、どちらの会社とも利害関係のない第三者ですので、誤解無く。


人気Q&Aランキング

おすすめ情報