ASPからOracleDBにデータ追加の方法と処理速度についての初歩的な質問

このQ&Aのポイント
  • ASPからOracleのDBに複数のデータを追加する方法として、Insert文とADOのAddNewメソッドとUpdateメソッドの2つがあります。どちらの方法が処理速度は速くなるかと、データ追加や更新の処理速度が既存データの件数に影響を受けるかについて質問しています。
  • 20件のデータ追加のテスト結果では両方の方法に大きな差は見られませんでしたが、いくつくらいの件数から差が出るかが知りたいです。
  • また、既存データの件数がデータ追加の処理速度に影響を与えるか、データ更新の場合はどうなるかも教えていただきたいです。
回答を見る
  • ベストアンサー

初歩的な質問ですが(ASPからのOracleDBのデータ追加)

初歩的な質問が2点あります。 よろしくご教示ください。 ASPからOracleのDBに複数(数十件という単位です)のデータ を追加しようとしています。 方法として、 1.Insert文で件数の数だけSQLを投げる 2.ADOのAddNewメソッドを使用して、件数の数だけ  レコードを追加し、最後に一回Updateメソッドを実行 の二通りがあると思うのです。 (他にも何か方法がありましたら教えて下さると非常にありが たいです) どちらの方法が処理速度は速くなりますか? ちなみに、20件でテストしても、あまり変わらないよう でした。何件くらいから差がでるものでしょうか? もう一点。 データ追加の処理速度は、既にDBに登録されている データの件数に影響されますか? データ更新の場合はどうでしょうか? 以上二点、どうぞよろしくお願いします。 環境↓ ・言語:ASP ・XML:MSXML3 ・ブラウザ:IE5.5 ・IIS:5.0 ・DB:Oracle 8i

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>1.Insert文で件数の数だけSQLを投げる >2.ADOのAddNewメソッドを使用して、件数の数だけ > レコードを追加し、最後に一回Updateメソッドを実行 > >の二通りがあると思うのです。 普通に考えた場合、そうなると思います。 あとは、ADOではなくoo4oを使うという手も・・・ oo4oの場合は配列が使えるので、一度のネットワークの往復でまとめてinsertをすることも可能です。 Oracleであれば、1の方が速くなるはずです。 トランザクションを1件目を挿入する前にかけて、最後のレコードを挿入したらコミットしてくださいね。 ただし、試されたとおり、数十件のレベルでは大差ありません。 >データ追加の処理速度は、既にDBに登録されている >データの件数に影響されますか? >データ更新の場合はどうでしょうか? 影響されます。 追加、更新だけではなく、削除もです。 特に、多くのインデックスが張られているテーブルは、インデックスの更新にも時間がかかるので、遅くなります。

rillarilla
質問者

お礼

お返事ありがとうございました! でも、 >追加、更新だけではなく、削除もです。 というのにはショックでした・・・。 (知りませんでした!) 現在、検索スピードを早くするために、 ビットマップインデックスがけっこうな数の カラムに貼られているような気が・・・。 データ更新はこれに足を引っ張られていると いうことでしょうか・・・。 でも、本当にありがとうございました! 参考にさせていただきます。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>現在、検索スピードを早くするために、 >ビットマップインデックスがけっこうな数の >カラムに貼られているような気が・・・。 >データ更新はこれに足を引っ張られていると >いうことでしょうか・・・。 大正解です。 特に、ビットマップインデックスは他のインデックスに比べてかなり更新に時間がかかりますので、マスターテーブルのようにあまり更新がかからない表に対して張るのがベターでしょう。

関連するQ&A

  • SQL Server へのデータ追加について

    現在a、b、cの店舗でそれぞれAccessをDBとして活用しているのですが、それとは別に 3店舗分のデータを一つにまとめた統合用DBとしてSQL Serverを利用したいと考えています。その際、それぞれ各店舗分のデータをSQL Serverへと追加していきたいのですが、どういった処理が最適で効率が良いのか分からず困っています。 希望する処理的には何らかのexeファイルを作成し、そのexeファイルを叩くとAccessからデータを吸い上げ、SQL Serverへとデータを追加するということを行いたいです。 私が考えられる処理としては以下の2点でした。 1、Accessから吸い上げたデータをストアドを使い、データを追加していく。 2、Accessから吸い上げたデータをCSVに変換し外部ファイルとし、ローダーを使用して   データを追加する。 それぞれの店舗データが3万件程あります。 なるべくDBに負担をかけないで以上の様な事を行いたいです。 DBまわりにお詳しい方、ご教授よろしくお願い致します。

  • ASPからExcelのデータを読む方法

    ASPページからサーバーにあるExcelの中のデータを読む方法はありますか? AccessなどのデータベースはADOで読み込めば良いと思うのですが Excelも同じように出来るのでしょうか? 環境はIIS4.0でOfficeは97、ブラウザはIE5.0を使っています。

  • [ASP+SQLserver]追加したてのIDを知りたい

    こんにちわ。 ASPとSQLサーバーで動的なWebページを作成しています。 SQLサーバー内に「sampletable」というデータベースがあるとします。 ID int (1から1づつ増加のオートナンバー) Name varchar というフィールド構成とします。 rsSample.Open "SELECT * FROM sampletable",dbConnection,3,2 rsSample.AddNew  rsSample("Name") = "Hajime Kindaichi" rsSample.Update という流れでDBにデータを追加しているとします(dbConnectionなどは前段にセットしているものとします)。 この場合、IDは自動で連続する番号を採番しているわけですが、rsSample.Updateのあとで直前に追加したてのIDを取得or利用したい場合、なにかコマンドなどを用いて取得することはできますでしょうか? それとも、SessionIDなどを残しておいてクエリを生成しOpenして取得しなければいけないのでしょうか? 以上、宜しくお願い申し上げます。

  • VB.への入力データをASPで取得するには?

    ASPを始めたばかりなのですが、困っています。 VB.netでつくったexeにユーザーが入力した値を取得してDBに格納、という作業なんですが、データ取得の処理をASPで書くにはどうすればいいのでしょうか? やり方のアドバイス、参考になるサイトなどありましたら、ぜひ教えてください。 よろしくお願いします。

  • ASPをバッチ風に起動

    今ASPからバッチを起動しようとしています。 Shelコマンドでbatを起動しようと思ったのですが、セキュリティとの問題があり、その処理のみを行うASP(画面表示無し)を作成しバッチASPとして処理を実行させていたます。 その際、メインの画面はバッチASPを呼び出すだけなのですが(window.openでバッチASPを呼び出す)、バッチASPが重い処理を行っているとメインのASPも実行がされなくなってしまいます。(待ち状態) バッチASPではADOでトランザクションを行いSQLを発効しています。 またメインASPではDBから時間を取得するだけのSQLを発効しています。 本来メインASPはバッチASPを呼び出すのみでバッチASPが重い処理を行っても依存しないと思っていますがどのようにすれば、依存しないようになるのでしょうか? 説明が難しいのですが、よろしくお願いします。

  • ASPで連携アクセスデータの限界数は?

    こんばんは。 ASPでイントラネット上で過去の事例を データベースから検索表示し、PDFファイルをリンクさせて表示させるというプログラムを作りました。 (XP Pro でIIS 5.1 アクセスDBを使用) ひとつの支店内で使うために作り、5000件くらいのデータ量なので、問題なく動いていたのですが、これを全国のすべての支店(10支店)でLANで本店にあるサーバーにアクセスして、閲覧、追加登録、PDFファイルのアップロードなどをしたいという要望がありました。 プログラム上ではOKなのですが、データが一気に10倍、つまり5万件ぐらいになってしまいます。それほどの件数は動かしたことがないのですが、アクセスでは無理なんじゃないかとおっしゃる方がいらっしゃいます。やはり無理なんでしょうか。XP Pro付属のIISでは、一度にアクセスできるのが10件までというのは説明したのですが、そんなに頻繁に見るものでもないのでそれでよいとのことでしたが。検索、表示などに時間がかかるようになってしまうのでしょうか? ご存知でしたらよろしくおねがいします。

  • ASPを用いてSQLServerからのデータ取得ができません。

    ASPを使ってSQLServerからのデータ取得ができません。 クライアントのPCから、Webサーバ経由でDBサーバへアクセスすると、 『[Microsoft][ODBC SQL Server Driver]分散トランザクション エラー』 というエラーメッセージが表示されます。 WebサーバとDBサーバが同一PC上にある場合は、問題なく実行できます。 また、同じテーブルを使って、簡単なサンプルコードを実行した場合では、WebサーバとDBサーバが別々のPC上にあっても問題なく動きます。 原因はIIS、もしくはSQLServerの設定にあるのか、それともASPファイルのソース自体にあるのか、わかりません。 どなたかご存知の方、よろしくお願いします。 DBとの接続はADO接続で、環境は、 Webサーバ/WindowsXP Pro、IIS 5.0 DBサーバ/WindowsXP Pro、SQLServer2000 を使っています。

  • トランザクションが原因?DBにデータ追加出来ません

    言語:PHP Framework:symfony DB:MySQL DBにデータを追加したいのですが、 [Rollback failed. There is no active transaction.] といったエラーが表示され、追加することが出来ません。 【ソース】 ------------------------------------------------------ try { $connection->beginTransaction(); ★DB追加処理; $connection->commit(); } catch (Exception $e) {   // ここで[Rollback failed. There is no active transaction.]というエラーが表示されます echo $e->getMessage(); $connection->rollBack(); } ------------------------------------------------------ DB追加処理の部分でエラーとなり、catchに飛ばされていたので、初めは追加の方法が間違っているのかと思ったのですが、下記の3つをソースから外すと正常に追加されました。 $connection->beginTransaction(); $connection->commit(); $connection->rollBack(); ※正確に言うと「$connection->beginTransaction();」を外すだけで追加出来ました。 また、これは私の勘違いかもしれませんが、初めてこの処理を行った時は正常にDBに追加されました。 実際にDBにデータが入ったのを確認しています。 ですが、2回目以降?からは、上記のように[Rollback failed. There is no active transaction.]というエラーが表示され、追加出来なくなりました。 ちなみにDB接続にはPDOというものを使用しているようです。 追加処理の部分に関してはSymfonyの方法で、下記のように実装しています。 ------------------------------------- $user = new T_USER(); $user->setName($name); $user->setAge($age); $user->save(); ------------------------------------- 何かヒントになるようなことでも構いませんので、分かる方がいらっしゃいましたらよろしくお願いします。 質問の内容に不備な点がございましたら、申し訳ありません。 以上です。

    • ベストアンサー
    • PHP
  • ASPを利用したWEBシステムについて

    お世話になっております。 ASPを利用し、WEBシステムを開発しています。 さて、その中で、とあるページにある「ダウンロード」というリンクを押すと、CSVファイルのダウンロード画面が表示されるというものになっています。 「ダウンロード」リンクは"aaaa.asp"となっており、"aaaa.asp"の中の処理で、DBより取得したデータを集計し、CSV出力しているというものです。 <a href="aaaa.asp">ダウンロード</a> そこで、今回はその処理動作において、データが0件の場合、ポップアップにて"データなし"という旨のメッセージを表示するという処理を施したいのですが、JavaScriptを使うのかな?と思いつつも、どうしたらいいのかわかりません。 説明不足なところもあるかもしれませんが、宜しくお願い申し上げます。

  • ORA-01401が表示され、データが追加出来ません。

    ACCESS2000のデータをORACLEへ移植を行う際、ACCESSの追加クエリーを使用してORACLEにデータを追加させようとしたところ、ORA-01401:列に挿入した値が大きすぎます(#1401)というメッセージが表示され追加出来ません。データ件数は、約16万件ほどあるのですが、何故このような現象が起こったのかわかりません。何卒、御教授宜しくお願い致します。